計算機網絡的知識點非常雜亂且瑣碎,非常容易讓人產生畏懼心理。其實計網通篇研究的核心就是不同計算機之間的通信過程,本文將從小白的角度,講解兩臺計算機之間是如何精確的找到對方的位置并發送和接收消息的,以從宏觀角度把握計算機網絡的體系結構。
1.五層協議參考模型
所謂通信協議就是通信雙方都必須要遵守的通信規則。如果沒有網絡通信協議,計算機的數據將無法發送到網絡上,更無法到達對方計算機,即使能夠到達,對方也未必能讀懂。有了通信協議,網絡通信才能夠發生。一般我們用五層協議參考模型來進行計算機網絡的學習:上述各層的作用會在下文詳細講解,我們首先要明白為什么要分層:協議的實現是很復雜的。因為協議要把人讀得懂的數據,如網頁、電子郵件等加工轉化成可以在網絡上傳輸的信號,需要進行的處理工作非常多。兩個系統中實體間的通信是一個十分復雜的過程。為了減少協議設計和調試過程的復雜性,網絡協議通常都按結構化的層次方式來進行組織,每一層完成一定功能,每一層又都建立在它的下層之上。不同的網絡協議,其層的數量、各層的名字、和功能不盡相同。也就是說,每一層都是在下一層的基礎上,通過層間接口向上一層提供一定的服務,而把“這種服務是如何實現的”細節對上層加以屏蔽。那么,我們將一個大型網絡體系分成了若干個層,各個層之間是如何進行通信的呢?- 1)對等層之間通信(不同開放系統中的相同層次之間的通信,對等層實體之間的信息交換):OSI標準為每一層的通信都嚴格定義了協議數據單元PDU的格式。對等層之間的通信是目的,對等層實體的協作保證該層功能和服務的實現
- 2)相鄰層之間通信(相鄰的上下層之間的通信,屬于局部問題):相鄰層之間的通信是手段,保證對等層實體之間的通信得以實施
假設網絡協議分為若干層,那么A、B兩節點通信,實際是節點A的第n層與節點B的第n層進行通信,故協議總是指某一層的協議,例如物理層協議、傳輸層協議、應用層協議。每一相鄰層協議間有一接口,下層通過該接口向上一層提供服務。2.物理層
兩臺計算機之間要進行通信,必然需要傳輸介質/物理媒介來連接兩臺計算機,這樣,我們才能把數據傳輸過去。傳輸介質分為:- 導向型傳輸介質:
- 雙絞線:適用于近距離
- 同軸電纜(抗干擾性強):適用于遠距離
- 光纖:帶寬遠遠大于其他傳輸媒體
- 非導向型傳輸介質:
- 無線電波
- 微波
- 紅外線、激光
也就是說,物理層的作用就是實現計算機之間的數據傳送,這個數據其實是比特流,物理層需要盡可能屏蔽掉具體傳輸介質和物理設備的差異,使其上面的數據鏈路層不必考慮網絡的具體傳輸介質是什么,即實現比特流的透明傳輸。3.數據鏈路層
物理層只是簡單的把計算機連接起來并在上面傳輸比特流,它還是存在著很多問題的:- 1)物理連接是有差錯和不可靠的
- 2)物理設備之間可能存在傳輸速度不匹配問題
也就是說僅僅靠物理層是無法保證數據傳輸的正確性的。這樣,數據鏈路層的主要作用就是加強物理層傳輸原始比特流的功能,將物理層提供的可能出錯的物理連接改造成為邏輯上無差錯的數據鏈路,使之對網絡層表現為一條無差錯的鏈路。在物理層提供服務的基礎上,數據鏈路層還肩負著為網絡層提供服務的責任,其最基本的服務是將來自網絡層的IP數據報封裝成幀,可靠的傳輸到相鄰結點的目標網絡層。①封裝成幀
首先了解一下為什么需要封裝成幀:前面說了,物理層它只是簡單的把計算機連接起來并在上面傳輸比特流(0、1序列),如果這些0,1組合的傳送毫無規則的話,計算機是解讀不了的。因此,我們需要制定一套規則來進行0、1的傳送,讓計算能夠讀懂這些序列。封裝成幀就是:發送端的數據鏈路層接收到上層網絡層傳過來的IP數據報后,在其前后部分添加首部、尾部,這樣就構成了一個幀。接收端在收到物理層上交的比特流后,就能根據首部和尾部的標記,從收到的比特流中識別幀的開始和結束。把一臺計算的的數據通過物理層和鏈路層發送給另一臺計算機,究竟是誰發給誰的,計算機與計算機之間如何區分,你總得給他們一個唯一的標識吧?于是,MAC地址出現了②MAC地址
MAC地址就是鏈路層地址,長度為6字節(48位),**用于唯一標識網絡適配器(網卡)。**計算機之間的數據傳送,就是通過MAC地址來唯一尋找、傳送的。一臺主機擁有多少個網絡適配器就有多少個MAC地址。例如筆記本電腦普遍存在無線網絡適配器和有線網絡適配器,因此就有兩個MAC地址。那么,一臺計算機它是如何知道另一臺計算機的MAC地址的呢?這是網絡層的ARP地址解析協議做的事情。4.網絡層
在計算機網絡中進行通信的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通信子網。網絡層的任務就是選擇合適的網間路由和交換結點,確保數據及時傳送。在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組和包進行傳送。在TCP/IP體系結構中,由于網絡層使用IP協議,因此分組也叫IP數據報,簡稱數據報。①IP協議
IP協議用于屏蔽下層物理網絡的差異,為上層提供統一的IP數據報。IP協議定義的地址,我們稱之為IP地址。IP數據報中含有發/收方的IP地址。IP協議提供無連接的、不可靠的、盡力的數據報投遞服務發送端可于任何時候自由發送數據,而接收端永遠不知道自己會在何時從哪里接收到數據。每個數據報獨立處理和傳輸,一臺主機發出的數據報序列,可能取不同的路徑,甚至其中的一部分數據報會在傳輸過程中丟失;IP協議本身不保證數據報投遞的結果。在傳輸的過程中,數據報可能會丟失、重復、延遲和亂序等,IP協議不對內容作任何檢測,也不將這些結果通知收發雙方;I數據報的丟失,通過路由器發ICMP報文告知;必要時,由高層實體(如TCP)負責差錯恢復動作。執行數據報的分段和封裝,以適應具體的傳輸網絡,由最終結點的IP模塊進行合段處理不同物理網絡對傳輸的幀/分組的體積有不同的規定;當數據報長度>MTU(最大傳輸單元MTU—MaximunTransferUnit)時,需對數據報分段。②ARP地址解析協議
OK,有了上面IP協議的知識,我們來講解一臺計算機它是如何知道另一臺計算機的MAC地址的,這就是網絡層的ARP地址解析協議做的事情。網絡層實現主機之間的通信,而鏈路層實現具體每段鏈路之間的通信。因此在通信過程中,IP數據報的源地址和目的地址始終不變,而MAC地址隨著鏈路的改變而改變。ARP(AddressResolutionProtocol)協議就可以實現由IP地址得到MAC地址。每個主機都有一個ARP高速緩存,里面有本局域網上的各主機和路由器的IP地址到MAC地址的映射表。如果主機A知道主機B的IP地址,但是ARP高速緩存中沒有該IP地址到MAC地址的映射,此時主機A通過廣播的方式發送ARP請求分組(該分組攜帶自己的IP地址和MAC地址以及目標主機的IP地址),主機B收到該請求后會發送ARP響應分組給主機A告知其MAC地址,隨后主機A向其高速緩存中寫入主機B的IP地址到MAC地址的映射。對應的,RARP協議可以實現由MAC地址轉化為IP地址
那么,我們如何知道對方計算機的IP地址呢,這是DNS協議做的事情,在應用層我們會詳細講解。5.傳輸層
通過物理層、數據鏈路層以及網絡層的互相作用,我們已經把數據成功從計算機A傳送到計算機B了,可是,計算機B里面有各種各樣的應用程序,計算機B該如何知道這些數據是給哪個應用程序的呢?所以,我們在從計算機A傳數據給計算表B的時候,還得指定一個端口(Port),以供特定的應用程序來接受處理。即IP地址+端口號就可以唯一確定某個主機上的某個應用進程也就是說,網絡層的功能是建立主機到主機的通信,而傳輸層的功能就是建立端口到端口的通信(也可以說是進程到進程之間的通信)傳輸層最常見的兩大協議是TCP協議和UDP協議,其中TCP協議與UDP最大的不同就是TCP提供可靠的傳輸,而UDP提供的是不可靠傳輸。- 1)用戶數據報協議UDP(UserDatagramProtocol)
UDP在傳送數據之前不需要先建立連接,遠程主機在收到UDP報文后,不需要給出任何確認。雖然UDP不提供可靠交付,但在某些情況下UDP確是一種最有效的工作方式(一般用于即時通信),比如:QQ語音、QQ視頻、直播等等- 2)傳輸控制協議TCP(TransmissionControlProtocol)
TCP提供面向連接的服務。在傳送數據之前必須先建立連接,數據傳送結束后要釋放連接。TCP不提供廣播或多播服務。由于TCP要提供可靠的,面向連接的傳輸服務(TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、流量控制、擁塞控制機制,在數據傳完后,還會斷開連接用來節約系統資源。這不僅使協議數據單元的首部增大很多,還要占用許多處理機資源。TCP一般用于文件傳輸、發送和接收郵件、遠程登錄等場景。6.應用層
應用層最接近于用于,它的任務就是通過應用進程間的交互來完成特定網絡應用。應用層協議定義的是應用進程間的通信和交互的規則。由于傳輸層傳來的數據五花八門,有html格式的,有mp4格式等等,所以對于不同的網絡應用需要不同的應用層協議。在互聯網中應用層協議很多,如域名系統DNS,支持萬維網應用的HTTP協議,支持電子郵件的SMTP協議等等。我們把應用層交互的數據單元稱為報文。由于本文的關鍵就是講解計算機之間的通信,所以其他協議我們就不講了,只講解一下DNS協議是如何將域名轉化為IP地址的。DNS域名解析協議
域名系統DomainNameSystem縮寫DNS,是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分布式數據庫(這里的分布式數據庫是指,每個站點只保留它自己的那部分數據),能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP地址。域名具有層次結構,從上到下依次為:根域名、頂級域名、二級域名。DNS可以使用UDP或者TCP進行傳輸,使用的端口號都為53。大多數情況下DNS使用UDP進行傳輸,這就要求域名解析器和域名服務器都必須自己處理超時和重傳從而保證可靠性。域名解析方式:基本原理:1)瀏覽器搜索自己的DNS緩存,緩存中維護一張域名與IP地址的對應表;2)若沒有,則搜索操作系統的DNS緩存;3)若沒有,則操作系統將域名發送至本地域名服務器(遞歸查詢方式),本地域名服務器查詢自己的DNS緩存,查找成功則返回結果,否則,通過以下方式迭代查找:- 本地域名服務器向根域名服務器發起請求,根域名服務器返回com域的頂級域名服務器的地址;
- 本地域名服務器向com域的頂級域名服務器發起請求,返回權限域名服務器地址
- 本地域名服務器向權限域名服務器發起請求,得到IP地址
4)本地域名服務器將得到的IP地址返回給操作系統,同時自己將IP地址緩存起來5)操作系統將IP地址返回給瀏覽器,同時自己也將IP地址緩存起來至此,瀏覽器已經得到了域名對應的IP地址。本文分享自華為云社區《兩臺計算機之間究竟是如何通信的?-云社區-華為云》,作者:龍哥手記。