小白級別,一台計算機如何把數據發送給另一台計算機


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

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

一、物理層

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

建立鏈接的目的就是為了通信。由於計算機之間只能傳輸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地址,於是可以開始進行數據交流了。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM