小白級別,一台電腦如何把數據發送給另一台電腦

天各一方的兩台電腦是如何找到對方並進行數據傳輸的?這一切要從電腦網路中五層模型開始講起。五層模型有以下這些

了解五層模型基本上就知道一台電腦如何把數據發送給另一台電腦了。不過標題也說了,這是小白級別,文章會省略許多繁瑣的細節。

一、物理層

如果兩台電腦要通訊,首先需要的就是把兩台電腦用線鏈接起來,例如用光纖、電纜、雙絞線等。就像這樣子

建立鏈接的目的就是為了通訊。由於電腦之間只能傳輸0和1這樣子的電訊號,所以我們發送給其他電腦的數據最終都會轉化成一大串只包含0和1這樣的電訊號。

二、數據鏈路層

由於發送過來的數據是一串只包含0和1的電訊號,我們根本看不懂,需要一些規定來識別這些電訊號。只需要將發過來的數據加頭加尾封裝成幀就能完成標識了。變成下面這樣子

幀首部里的資訊主要是:要發送給誰,誰發送的,等等。幀尾部就是數據接收結束的資訊。
幀的數據部分也就是你要發送給對方的資訊。當然如果你的數據比較大的話,會被封裝成多個幀進行發送。

要發送給誰,需要有個標識把。這個標識就是MAC地址。對方的MAC地址和自己的MAC地址存放的位置都是在幀首部。

MAC地址(也叫物理地址):

在電腦里存在於網卡中

網路中每台設備都有一個唯一的網路標識,這個網路標識叫MAC地址或網卡地址。這個地址是由網路設備製造商生產時寫在硬體內部的。

假如知道對方的MAC地址,電腦A要怎樣發送資訊給電腦B呢?要知道電腦A不止連著電腦B,還連著其他電腦。就像這樣子

電腦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地址發回給對方,如果不是,就丟棄。
就像這樣子

四、傳輸層
每台電腦上都有很多的應用程式,我們目前還不知道是哪個應用程式應該接受數據,所以引入埠這個詞。傳輸層提供了主機應用程式之間的端到端的服務。端即為埠。我們訪問百度的時候似乎不需要輸入埠號啊,其實訪問百度的時候採用的是默認埠80,像http這類域名用的都是埠80。

五、應用層

應用層可以為用戶提供具體服務,是與我們最緊密相關的一層。我們從傳輸層收到的數據格式有很多,例如.txt.jpg,png.mp4等等。而應用層就是幫助我們完成分析這些數據格式。

六、最後用幾幅圖來總結一下以上內容。

應用層:

一開始只有電腦A向電腦B之間通訊

電腦B收到101101101011後根本就看不懂。

數據鏈路層:

於是鏈路層上場了,將數據封裝成幀

這下電腦B收到資訊後總算能看出一點頭緒了。

但之後不久電腦A又連了電腦C和電腦D。

電腦A此時又想發送資訊給電腦B。電腦C和電腦D並不想接受電腦A發給電腦B的資訊。於是產生了MAC地址來進行處理,當電腦C和電腦D發現MAC地址和自己的MAC地址不一樣時就將數據包拋棄。

網路層:

但是電腦A並不知道電腦B的MAC地址是啥。於是產生了ARP協議。通過ARP協議能夠獲取電腦B的MAC地址。ARP協議是通過IP地址得到MAC地址的一種協議。

就這樣電腦A得到了電腦B的MAC地址,於是可以開始進行數據交流了。

如果覺得有收穫,不妨花個幾秒鐘點個贊,歡迎關注我的公眾號玩編程地碼農,目前專註寫數據結構與演算法和電腦基礎等相關知識。