1. 程式人生 > >小白級別,一臺計算機如何把資料傳送給另一臺計算機

小白級別,一臺計算機如何把資料傳送給另一臺計算機

天各一方的兩臺計算機是如何找到對方並進行資料傳輸的?這一切要從計算機網路中五層模型開始講起。**五層模型**有以下這些 ![](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fdbba6d1d76d4d2480b87256b3f3d392~tplv-k3u1fbpfcp-zoom-1.image) 瞭解五層模型基本上就知道一臺計算機如何把資料傳送給另一臺計算機了。不過標題也說了,這是**小白**級別,文章會省略許多繁瑣的細節。 一、物理層 如果兩臺計算機要通訊,首先需要的就是把兩臺計算機用線連結起來,例如用光纖、電纜、雙絞線等。就像這樣子 ![](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3275f714919f4ae8931cbd323562ecf3~tplv-k3u1fbpfcp-zoom-1.image) 建立連結的目的就是為了通訊。由於計算機之間只能傳輸0和1這樣子的電訊號,所以我們傳送給其他計算機的資料最終都會轉化成一大串只包含0和1這樣的電訊號。 二、資料鏈路層 由於傳送過來的資料是一串只包含0和1的電訊號,我們根本看不懂,需要一些規定來識別這些電訊號。只需要將發過來的資料加頭加尾**封裝成幀**就能完成標識了。變成下面這樣子 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a89b40b9d6c04393acf5aa845f84e567~tplv-k3u1fbpfcp-zoom-1.image) 幀首部裡的資訊主要是:要傳送給誰,誰傳送的,等等。幀尾部就是資料接收結束的資訊。 幀的資料部分也就是你要傳送給對方的資訊。當然如果你的資料比較大的話,會被封裝成多個幀進行傳送。 要傳送給誰,需要有個標識把。這個標識就是MAC地址。對方的MAC地址和自己的MAC地址存放的位置都是在幀首部。 MAC地址(也叫實體地址): 在計算機裡存在於網絡卡中 ![](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/81d9ef60ede1475b8f1c7f00e9de4fad~tplv-k3u1fbpfcp-zoom-1.image) 網路中每臺裝置都有一個唯一的網路標識,這個網路標識叫MAC地址或網絡卡地址。這個地址是由網路裝置製造商生產時寫在硬體內部的。 **假如**知道對方的MAC地址,計算機A要怎樣傳送資訊給計算機B呢?要知道計算機A不止連著計算機B,還連著其他計算機。就像這樣子 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ec3df2b1bf4d4c8698a2636ad2fb7846~tplv-k3u1fbpfcp-zoom-1.image) 計算機A並不知道計算機B在哪裡,所以只能把資訊傳送給所有計算機,這種一次給多臺計算機發送資料的方式我們稱為**廣播**。計算機收到資料後看一下幀頭裡的MAC地址,如果和自己的一樣就接收,如果不一樣就丟棄。就像我們平時聽到的廣播一樣,如果廣播裡喊的是自己的名字,我們就回應,如果不是自己的名字,就直接忽略。 不過現在還有個問題,我們並不知道對方的MAC地址是什麼。 我們要怎麼在那麼多個MAC地址找到我們要找的那一個呢?這個時候需要通過ARP協議來找對方的MAC地址。ARP協議的功能是通過對方IP地址獲取對方MAC地址。不過IP地址是在網路層。在鏈路層這裡只需要知道通過**ARP協議**可以獲得MAC地址就行了。 三、網路層 說到網路層就得先講一下子網,前面也講到了子網。我們所處的網路是由無數的子網組成的。把一個大的網路劃分成小的網路就叫做子網劃分,劃分出來的小的網路就叫做子網。 那為什麼要進行子網劃分呢?試想一下如果**不進行**子網劃分的話,計算機A每傳送一條資料,**網路**(範圍很大)上的其他計算機都會收到這條資料,這樣子想想就覺得不恰當,又比如反過來說,全世界的計算機都發送一條資訊,你的計算機都會收到這條資訊,我想你的計算機分分鐘崩潰。所以需要進行子網劃分。 子網劃分的好處可以這樣子來看。計算機A傳送一條資料給計算機B,一開始**只有**自己所在的**子網**裡的計算機能夠收到這條資料,如果計算機B在自己所在的子網裡,就將資料傳送給計算機B,如果不在的話,就會將資料傳送給閘道器,讓閘道器進行轉發。 那麼如何判斷對方計算機是否和自己的計算機是否在同一個子網呢?這就需要用到**IP協議**了。 IP協議規定網路上所有的裝置都必須有一個獨一無二的IP地址。 IP地址是一個32位的二進位制數,通常被分割為4個“8位二進位制數”。IP地址通常用“點分十進位制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進位制整數。例:點分十進IP地址(100.4.5.6),實際上是32位二進位制數(01100100.00000100.00000101.00000110)。 每臺計算機都有一個IP地址,這個IP地址被分為兩部分,前面一部分代表網路部分,後面一部分代表主機部分。並且網路部分和主機部分所佔用的二進位制位是不固定的。 如果兩臺計算機的**網路部分一樣**,我們就說這兩臺計算機在**同一個子網**中。例如192.168.6.1和192.168.6.2,假如這兩個IP地址的網路部分為24位,主機部分則為8位。它們的網路部分都為192.168.6。所以它們處於同一個子網中。 那如何知道網路部分和主機部分佔幾位。 這需要另一個東西---**子網掩碼**。 子網掩碼和ip地址一樣是32位(具有一一對應的關係),網路部分對應的子網掩碼都是1,主機部分對應的子網掩碼都是0。如上們的ip地址。網路部分為24位的話對應的子網掩碼就是11111111.11111111.11111111.00000000,即255.255.255.0。 用子網掩碼和ip地址進行與(and)運算就可以知道網路部分是什麼。 知道了網路部分怎麼來,但我們還不知道IP地址是怎麼來的。其實IP地址是我們自己輸入的。就比如我們要訪問百度,我們一般在位址列中輸入www.baidu.com 這個域名從而訪問百度,那這個和IP地址有什麼關係呢?表面上我們輸入的是www.baidu.com ,實際上是會經過一個DNS域名系統幫助我們將其解析成IP地址39.156.69.79。用域名訪問網站和用ip地址訪問網站效果是一樣的。 有了ip協議的知識之後,再來看一下ARP協議。 ARP協議是通過IP地址得到MAC地址的一種協議。也是以廣播的形式傳送一個數據包,資料包裡包含對方的IP地址,首先需要判斷對方的IP地址和自己的IP地址是否在同一個子網中,如果不在一個閘道器裡,需要交給閘道器進行轉發。如果在同一個閘道器裡,只需要再判斷資料包裡的IP地址是否和自己的IP地址一樣就行了,如果和自己的IP地址一樣,就把自己的MAC地址發回給對方,如果不是,就丟棄。 就像這樣子 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2b834ac0c76442578d9c59873330e05a~tplv-k3u1fbpfcp-zoom-1.image) 四、傳輸層 每臺電腦上都有很多的應用程式,我們目前還不知道是哪個應用程式應該接受資料,所以引入埠這個詞。傳輸層提供了主機應用程式之間的端到端的服務。端即為埠。我們訪問百度的時候似乎不需要輸入埠號啊,其實訪問百度的時候採用的是預設埠80,像http這類域名用的都是埠80。 五、應用層 應用層可以為使用者提供具體服務,是與我們最緊密相關的一層。我們從傳輸層收到的資料格式有很多,例如.txt.jpg,png.mp4等等。而應用層就是幫助我們完成分析這些資料格式。 六、最後用幾幅圖來總結一下以上內容。 應用層: 一開始只有計算機A向計算機B之間通訊 ![](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dc0423b7fc9b4b509ece9648eaaa4eab~tplv-k3u1fbpfcp-zoom-1.image) 計算機B收到101101101011後根本就看不懂。 資料鏈路層: 於是鏈路層上場了,將資料封裝成幀 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a89b40b9d6c04393acf5aa845f84e567~tplv-k3u1fbpfcp-zoom-1.image) 這下計算機B收到資訊後總算能看出一點頭緒了。 但之後不久計算機A又連了計算機C和計算機D。 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ec3df2b1bf4d4c8698a2636ad2fb7846~tplv-k3u1fbpfcp-zoom-1.image) 計算機A此時又想傳送資訊給計算機B。計算機C和計算機D並不想接受計算機A發給計算機B的資訊。於是產生了MAC地址來進行處理,當計算機C和計算機D發現MAC地址和自己的MAC地址不一樣時就將資料包拋棄。 網路層: 但是計算機A並不知道計算機B的MAC地址是啥。於是產生了ARP協議。通過ARP協議能夠獲取計算機B的MAC地址。ARP協議是通過IP地址得到MAC地址的一種協議。 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2b834ac0c76442578d9c59873330e05a~tplv-k3u1fbpfcp-zoom-1.image) 就這樣計算機A得到了計算機B的MAC地址,於是可以開始進行資料交流了。 ![](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/57bee5f8a9514c35b7c3f30cc5caffa9~tplv-k3u1fbpfcp-zoom-1.image) 如果覺得有收穫,不妨花個幾秒鐘點個贊,歡迎關注我的公眾號**玩程式設計地碼農**,目前專注寫資料結構與演算法和計算機基礎等相關知識。 ![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4066dfc9839e4345bba6e6becb966647~tplv-k3u1fbpfcp-zoom-1.