OSI七層協議大白話解讀(轉)
網際網路的本質就是一系列的網路協議,這個協議就叫OSI協議(一系列協議),按照功能不同,分工不同,人為的分層七層。實際上這個七層是不存在的。沒有這七層的概念,只是人為的劃分而已。區分出來的目的只是讓你明白哪一層是幹什麼用的。
每一層都執行不同的協議。協議是幹什麼的,協議就是標準。
實際上還有人把它劃成五層、四層。
七層劃分為:應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、物理層。
五層劃分為:應用層、傳輸層、網路層、資料鏈路層、物理層。
四層劃分為:應用層、傳輸層、網路層、網路介面層。
物理層:
字面意思解釋:物理傳輸、硬體、物理特性。在深圳的你與北京的朋友聊天,你的電腦必須要能上網,物理體現是什麼?是不是接一根網線,插個路由器,北京的朋友那邊是不是也有根網線,也得插個路由器。也就是說計算機與計算機之間的通訊,必須要有底層物理層方面的連通,就類似於你打電話,中間是不是必須得連電話線。
中間的物理連結可以是光纜、電纜、雙絞線、無線電波。中間傳的是電訊號,即010101...這些二進位制位。
底層傳輸的010010101001...這些二級制位怎麼才能讓它有意義呢?
要讓這些010010101001...有意思,人為的分組再適合不過了,8位一組,傳送及接收都按照8位一組來劃分。接收到8位為一組的話,那麼就可以按照這8位數來做運算。如果沒有分組,對方接收的計算機根本就不知道從哪一位開始來做計算,也解析不了收到的資料。我發了16位你就按照16位來做計算嗎?我發100位你就按照100位做計算嗎?沒什麼意義是吧。因此要想讓底層的電訊號有意義,必須要把底層的電訊號做分組。我做好8位一組,那麼我收到資料,我就知道這幾個8位做一組,這幾個8位做一組。那麼每個8位就可以得到一個確定的數。分組是誰幹的活呢?物理層幹不了,這個是資料鏈路層乾的。
資料鏈路層
早期的時候,資料鏈路層就是來對電訊號來做分組的。以前每個公司都有自己的分組方式,非常的亂,後來形成了統一的標準(標準就是協議),即乙太網協議Ethernet。
Ethernet規定
一組電訊號稱之為一個數據包,或者叫做一個“幀”
每一資料幀分成:報頭head和資料data兩部分
head包含:(固定18個位元組)
傳送者(源地址,6個位元組)
接收者(目標地址,6個位元組)
資料型別(6個位元組)
data包含:(最短46位元組,最長1500位元組)
資料包的具體內容
head長度+data長度=最短64位元組,最長1518位元組,超過最大限制就分片傳送。
這就像寫信,傳送者的地址(源地址)就是你家的地址,接收者地址(目標地址)就是對方的收信地址,你家的路由器就相當於郵局。其實在計算機通訊中的源地址和目標地址指的是mac地址。
Mac地址的由來:
head中包含的源和目標地址由來:Ethernet規定接入Internet的裝置都必須具備網絡卡,傳送端的和接收端的地址便是指網絡卡的地址,即Mac地址。
每塊網絡卡出廠時都被燒錄上一個實際上唯一的Mac地址,長度為48位2進位制,通常由12位16進位制數表示,(前六位是廠商編碼,後六位是流水線號)
有了mac地址以後,計算機就可以通訊了,假設一個教室就是一個區域網(隔離的網路),這個教室裡面有幾臺計算機,計算機的通訊和人的通訊是一個道理,把教室裡面的人都比作一個個計算機,假設教室裡面的人都是瞎子,其實計算機就是瞎子的,計算機通訊基本靠吼,現在我要找教室裡面的飛哥要戰狼2的片,然後我就吼一聲,說我要找飛哥要戰狼2的片,戰狼2的片就屬於我的資料,但是我在發的時候我是不是要標識我是誰,我要找誰,我是誰就是我的mac地址,我要找誰就是飛哥的mac地址,這兩個地址做資料包的頭部,再加上資料戰狼2的片就構成了一個數據幀。
這個資料包封裝好以後就往外發,到物理層以後就全部轉成二級制,往外發是怎麼發的呢?就是靠吼。即“我是Edison,我找飛哥要戰狼2的片”。這麼吼了一嗓子以後,全屋子的人都能聽到,這就是廣播。
計算機底層,只要在一個教室裡(一個區域網),都是靠廣播的方式,吼。
區域網的理解:什麼是網際網路,網際網路就是由一個個區域網組成,區域網內的計算機不管是對內還是對外都是靠吼,這就是資料鏈路層的工作方式-----廣播。
廣播出去以後,所有人都聽得見,所有人都會拆開這個包,讀傳送者是誰,接收者是誰,只要接收者不是自己就丟棄掉。對計算機來說,它會看自己的Mac地址,飛哥收到以後,他就會把片發給我,傳送回來同樣採用廣播的方式了,靠吼。
同一個教室(同一個區域網)的計算機靠吼來通訊,那不同教室的計算機又如何?
比如說區域網1的pc1與區域網2的pc10如何通訊?你在教室1(區域網1)吼,教室2(區域網2)的人肯定是聽不見的。這就是跨網路進行通訊,資料鏈路層就解決不了這個問題了,這就得靠網路層出面了。
在講網路層之前,其實基於廣播的這種通訊就可以實現全世界通訊了,你吼一聲,如果全世界是一個區域網,全世界的計算機肯定可以聽得見,從理論上似乎行得通,如果全世界的計算機都在吼,你想一想,這是不是一個災難。因此,全世界不能是一個區域網。於是就有了網路層。
網路層:
網路層定義了一個IP協議,
你想,我是這個教室的一個學生,我想找隔壁教室一個叫老王的學生,我也不認識老王,那怎麼辦,我吼?老王在另外一個教室肯定是聽不到的。找教室的負責人,這個教室的負責人就負責和隔壁教室的負責人說話,說我們教室的有個學生要找你們教室的老王。往外傳的東西交給負責人就可以了,內部的話上面已經提到,通過廣播的方式,對外的東西廣播失效。教室的負責人就是閘道器,閘道器即網路關口的意思。
Mac地址是用來標識你這個教室的某個位置,IP地址是用來標識你在哪個教室(哪個區域網)。你要跨網路發包你是不是要知道對方的IP地址,比如你要訪問百度,你肯定得知道百度伺服器的IP地址。計算機在發包前,會判斷你在哪個教室,對方在哪個教室,如果在一個教室,基於mac地址的廣播發包就OK了;如果不在一個教室,即跨網路發包,那麼就會把你的包交給教室負責人(閘道器)來轉發。Mac地址及IP地址唯一標識了你在網際網路中的位置。
資料鏈路層中會把網路層的資料包封裝到數資料鏈路層的資料位置,然後再新增上自己的包頭,再發給物理層,物理層發給閘道器,閘道器再發給對方教室的閘道器,對方教室的閘道器收到後在那個教室做廣播。
在資料鏈路層看,資料封裝了兩層,跟玩俄羅斯套娃有點類似,一層套了一層。
最終變成
現在來看另一個問題,在吼之前怎麼知道對方的Mac地址?這就得靠ARP協議。
ARP協議的由來:在你找飛哥要片之前,你的先幹一件事,想辦法知道飛哥的Mac地址。即你的機器必須先發一個ARP包出去,ARP也是靠廣播的方式發,ARP傳送廣播包的方式如下:
區域網中怎麼獲取對方的Mac地址:
肯定要知道對方的IP地址,這是最基本的,就像你要訪問百度,肯定得知道百度的域名,域名就是百度的IP地址。自己的IP可以輕鬆獲得,自己的Mac也輕鬆獲取,目標Mac為16個F,我們叫廣播地址,表達的意思是我想要獲取這個目標IP地址172.16.10.11的機器的Mac地址。Mac為16個F代表的是一種功能,這個功能就是獲取對方的MAC地址,計算機的Mac永遠不可能是16個F。假設是在本教室廣播,一嗓子吼出去了,所有人開始解包,只有IP地址是172.16.10.11的這個人才會返回他的Mac地址,其他人全部丟棄。發回來源Mac改成飛哥自己的Mac地址,同時把飛哥的Mac地址放在資料部分。
跨網路怎麼獲取對方的Mac地址:
通過IP地址區分,計算機運算判斷出飛哥不在同一個教室,目標IP就變成了閘道器的IP了。閘道器的IP在計算機上配死了,可以輕鬆獲取。
這樣閘道器就會把它的Mac地址返回給你,然後正常發包
閘道器幫你去找飛哥,但對使用者來說,我們根本就感覺不到閘道器的存在。
傳輸層
傳輸層的由來:網路層的ip幫我們區分子網,乙太網層的mac幫我們找到主機,然後大家使用的都是應用程式,你的電腦上可能同時開啟qq,暴風影音,等多個應用程式,
那麼我們通過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程式,答案就是埠,埠即應用程式與網絡卡關聯的編號。
傳輸層功能:建立埠到埠的通訊
補充:埠範圍0-65535,0-1023為系統佔用埠
tcp協議:
可靠傳輸,TCP資料包沒有長度限制,理論上可以無限長,但是為了保證網路的效率,通常TCP資料包的長度不會超過IP資料包的長度,以確保單個TCP資料包不必再分割。
乙太網頭 ip 頭 tcp頭 資料
udp協議:
不可靠傳輸,”報頭”部分一共只有8個位元組,總長度不超過65,535位元組,正好放進一個IP資料包。
乙太網頭 ip頭 udp頭 資料
應用層
應用層由來:使用者使用的都是應用程式,均工作於應用層,網際網路是開發的,大家都可以開發自己的應用程式,資料多種多樣,必須規定好資料的組織形式 。
應用層功能:規定應用程式的資料格式。
例:TCP協議可以為各種各樣的程式傳遞資料,比如Email、WWW、FTP等等。那麼,必須有不同協議規定電子郵件、網頁、FTP資料的格式,這些應用程式協議就構成了”應用層”。
---------------------
作者:taotongning
來源:CSDN
原文:https://blog.csdn.net/taotongning/article/details/81352985