網絡七層協議之物理層

咱們以一個很是簡單的例子開始:html

兩服務器通信問題

兩服務器通信問題

如上圖,有兩臺服務器,分別是 Server 1 和 Server 2 。 咱們先作一個假設:計算機網絡如今尚未被髮明出來, 做爲計算機科學家的你,想在這兩臺服務器間傳遞數據,怎麼辦?linux

原文地址: https://learn-linux.readthedocs.io
QQ交流羣:Linux網絡編程,羣號: 183196643
歡迎關注咱們的公衆號: 小菜學編程 (coding-fan)

這時,你可能會想到,用一根電纜把兩臺服務器鏈接起來:編程

經過電纜實現通信

物理課你們都學過,電線能夠分爲 低電平 和 高電平 。 電平能夠高低變化,這樣不就能夠傳遞信息了麼: Server 1 控制電纜電平的高低, Server 2 檢測電平的高低,這樣就實現了 Server 1 往 Server 2 發送數據啦!服務器

更進一步,能夠將高低電平抽象成數學語言:咱們用低電平表示 0 ,高電平表示 1 ,這樣就獲得一個理想化的信道:微信

理想化信道

經過信道,雙方能夠傳遞一些 01 比特流。 例子中,咱們傳輸的比特流是 1111010101... (從右往左看)。 比特流能夠編碼任意信息: 好比,咱們用 1111 表示告訴對方本地開機了,用 0000 告訴對方本地準備關機了。網絡

到目前爲止,咱們是否是萬事具有了呢? 一個比特流信道成爲現實?——理論上是這樣子的。 可是,現實世界每每要比理想化的模型複雜一些。學習

發送控制

信道無窮無盡

首先,如上圖,信道是無窮無盡的。 由於,信道狀態要麼爲 0 ,要麼爲 1 ,沒有一種表示空閒的特殊狀態。編碼

結尾在哪?

舉個例子,如上圖, Server 1 向 Server 2 發送比特序列 101101001101 (從右往左讀)。 最後一個比特是 1 ,對應的電平是高電平。 發送完畢後,因爲沒有沒有其餘地方改變電纜的電平,因此仍是維持高電平狀態。 也就是說,信道看起來仍是按照既定節拍,源源不斷地發送 1 (灰色部分), Server 2 怎麼檢測結尾在哪裏?spa

咱們能夠定義一些特殊的比特序列,用於定義開頭結尾: 101010 表示開頭, 010101 表示結尾。計算機網絡

.引入控制比特

這時, Server 1 先發送 101010 (紅色),告訴 Server 2 我要開始發數據了; 而後, Server 1 開始發送數據 1101011 (黑色部分); 最後, Server 1 發送 010101 (綠色),告訴 Server 2 數據發送完畢。 注意到,平時信道爲 1 (灰色),也就是表明空閒狀態。

衝突仲裁

若是兩臺服務器同時往信道里發送數據,會發生什麼事情呢?

發送衝突:兩臺服務器同時發送數據

確定衝突了嘛!一臺發 0 ,一臺發 1 ,那你說信道究竟是 0 仍是 1 ? 那麼,衝突要怎麼解決呢?

解決方式也簡單,只需在硬件層面實現一種機制:在檢測到兩臺服務器同時發送數據時,及時喊停,並協商到底由哪一方先發。

總結

本節討論了一個最簡單的模型,解決兩臺服務器之間的通信問題。 經過電纜,在兩臺機器間創建了一個理想的比特流傳輸信道。 這其實就是網絡分層結構中最底層——物理層的做用:

  • 傳輸比特流
  • 依賴物理(電氣)特性

這一層對開發人員來講,基本上是透明的,咱們只需將其理解成一個比特流傳輸信道便可。 至於細節問題,高低電平啦,信號啦,各類物理特性啦,統統留給電子工程師去關心好啦!

進度

新技能Get✔️

下一步

下一節,咱們將經過 多服務器通信問題 進入 數據鏈路層 的學習。

訂閱更新,獲取更多學習資料,請關注咱們的 微信公衆號 :

小菜學編程

相關文章
相關標籤/搜索