前面我們已經和大家講完了計算機網路裡面的一些常見裝置,大家有沒有想過,這些裝置之間是如何互相溝通的呢?它們又是怎樣能夠理解彼此的呢?別急,我慢慢和大家說。
網路互連模型網路誕生之初,通常只有同一家廠商生產的計算機才能互相通訊,此時只能採用 DECnet 方案或者是 IBM 的方案,但是這兩個方案之間並不互通,也就是說,在那個年代,如果我們的網路已經用了 DECnet 的方案,那麼整個網路就只能用 DECnet 的方案,新增裝置也只能用這個方案。直到上個世紀七十年代末,國際標準化組織(ISO)開發了開放式系統互聯模型,也就是 OSI 參考模型,才讓不同廠商之間的裝置能夠通訊。OSI 參考模型是理想的模型,不過現實中中還是 TCP/IP 模型使用更多。但這篇文章依舊會以 OSI 參考模型的講述為主,大家理解其中一個模型,就能理解其他的模型了。
參考模型的優點OSI 模型旨在以協議的形式幫助廠商生產可互相操作的網路裝置和軟體,讓不同廠商的網路能夠協同工作,也讓執行不同作業系統的主機之間可以互相通訊。比如說咱們辦公室,有的同事電腦是 MacOS 系統,有的是 Windows 系統,還有各種手機,執行 Linux 系統的伺服器,只要是網路可達,完全可以正常通訊。
比如我們公司會有很多部門,並有一套執行標準,規定了每個部門的任務,比如說誰去面對客戶,誰來實現客戶需求,誰負責員工保障等。每個部門就相當於 OSI 參考模型中的層,每層的工作雖然不一樣,但是都是為了同樣的戰略目標——通訊。而且每個部門無法獨立存在,必須和其他部門協同工作才可以完成任務。這套執行標準就是我們的 OSI 參考模型。這個模型並不是一個物理模型,而是一個邏輯模型,並不是說我們從物理上給分了七層,而是和我們公司的執行標準一樣,是一組指導原則,幫助我們完成工作。
使用這樣的分層模型有很多優點:每一層可以各司其職,這樣有助於元件開發;並且標準化網路元件,就不會出現我們前面所說的各個廠商之間完全無法通訊的情況;而且可以避免修改其中一層而影響其他層的狀況。
OSI 七層模型OSI 模型是主要的網路架構模型,分為七層:
OSI 參考模型
從上到下依次為,應用層、表示層、會話層、傳輸層、網路層、資料鏈路層和物理層。
應用層就是使用者和計算機交流的場所,比如說檔案傳輸和電子郵件等應用,都是應用層的工作。僅當馬上需要訪問網路時,這一層才會發揮作用,如果是訪問本機上已儲存的檔案,是不需要用到應用層的。表示層承擔著翻譯工作,它會將來自應用層的資料轉換成所有計算機都通用的標準格式,並對資料進行加密。會話層負責建立、管理和終止會話的工作,還能將使用者資料分開。傳輸層提供端到端的資料傳輸服務,在網際網路中的傳送主機和接收主機之間建立邏輯連線,同時也會控制流量,防止流量太大而導致資料丟失的情況出現,在這一層還會區分不同的應用程式,透過埠號進行標記。網路層就是邏輯定址,確定最佳的資料傳輸路徑。資料鏈路層提供資料的物理傳輸,進行區域網內部的物理定址,並處理錯誤通知。物理層的作用就是傳送和接受原始位元流,比如說咱們第一篇文章說到的傳輸介質,就是工作在物理層。這麼說大家會不會覺得不太好理解呢?簡單來說,越是上層就越靠近使用者,越是底層就越接近硬體。比如說應用層就是直接和使用者接觸的,物理層的位元流就可以直接透過硬體傳輸了。OSI 參考模型是在協議前設計的,具有通用性,且概念清晰,但是過於複雜了,在 TCP/IP 網路中有更加簡潔的模型。
TCP/IP 參考模型TCP/IP 模型和 OSI 參考模型一樣,都採用的是層次結構的方式,對應關係如下圖,
TCP/IP 模型與 OSI 參考模型對應關係
相對於 OSI 來說是不是更簡單一點呢?但是 TCP/IP 模型是有了協議再定義的模型,並不適用於非 TCP/IP 網路。
訊息要經歷什麼才能送到你面前呢以手機發訊息為例,
首先要開啟一個溝通軟體,當我們執行開啟軟體這個操作的時候,就是由應用層來完成和我們的互動。然後輸入資訊,輸入的資訊叫做使用者資料,然後這個資料會在表示層被“翻譯”成計算機可識別的 ASCII 碼。當我們按完了傳送按鈕,剩下來就是機器的事情了,在傳輸之前,需要先建立會話連線才能傳輸資料,這就是會話層的工作了。會話層建立會話,產生相應的主機程序傳給傳輸層。傳輸層將以上資訊加上埠號以便目的主機辨別,得知具體應由本機的哪個任務來處理。這時候資訊還沒有發出去,被交給了網路層。在網路層加上 IP 地址使資料能確認應到達具體某個主機,選路也發生在這一層,確認應發給誰之後我們還要知道該怎麼去,也就是會查地圖,選一條最優的路。到了資料鏈路層後,資料前面會再被加上 MAC 地址,用於在區域網內部尋找具體主機,最後資料被轉成位元流資訊,從而在網路上傳輸。位元流長什麼樣呢?其實就是 010101010…… 這種,因為我們手機、電腦還有上文提到的網路裝置,裡面都是電路板,而電路板只有開合兩個狀態,對應著 0 和 1,所以只有這樣的位元流才可以透過硬體傳播。資料被網路上的各個主機接收之後,主機會看一眼是不是找自己的,如果不是就丟掉,如果是找自己的就會檢視埠號,判斷由哪個程序來處理該資訊。比如說微信發的訊息就會去找微信,不會說 QQ 收到了微信的訊息。訊息的傳送和接受只是一瞬間,可是在這個瞬間裡面它們經歷過揉碎重組,還被加上了各種各樣的“帽子”,不能被正確接收的訊息還會被丟掉,所以說再收到訊息的時候,多少看一眼吧,畢竟它歷經千辛萬苦才被送到你面前。
我們的資料傳輸原理基礎部分已經結束了,大家是不是又產生了很多新的疑問呢?比如說為什麼有 MAC 地址又有 IP 地址,到底以哪個為準呢?有地址是不是也要有地圖才會找到目的地呢?下一篇文章會為大家講述在 OSI 參考模型的第二層,資料是怎麼找到路的。