网络七层协议之物理层
我們以一個非常簡單的例子開始:
兩服務器通訊問題
如上圖,有兩臺服務器,分別是?Server?1?和?Server?2?。 我們先做一個假設:計算機網絡現在還沒有被發明出來, 作為計算機科學家的你,想在這兩臺服務器間傳遞數據,怎么辦?
原文地址: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?怎么檢測結尾在哪里?
我們可以定義一些特殊的比特序列,用于定義開頭結尾:?101010?表示開頭,?010101?表示結尾。
這時,?Server?1?先發送?101010?(紅色),告訴?Server?2?我要開始發數據了; 然后,?Server?1?開始發送數據?1101011?(黑色部分); 最后,?Server?1?發送?010101?(綠色),告訴?Server?2?數據發送完畢。 注意到,平時信道為?1?(灰色),也就是代表空閑狀態。
沖突仲裁
如果兩臺服務器同時往信道里發送數據,會發生什么事情呢?
肯定沖突了嘛!一臺發?0?,一臺發?1?,那你說信道到底是?0?還是?1?? 那么,沖突要怎么解決呢?
解決方式也簡單,只需在硬件層面實現一種機制:在檢測到兩臺服務器同時發送數據時,及時喊停,并協商到底由哪一方先發。
總結
本節討論了一個最簡單的模型,解決兩臺服務器之間的通訊問題。 通過電纜,在兩臺機器間建立了一個理想的比特流傳輸信道。 這其實就是網絡分層結構中最底層——物理層的作用:
- 傳輸比特流
- 依賴物理(電氣)特性
這一層對開發人員來說,基本上是透明的,我們只需將其理解成一個比特流傳輸信道即可。 至于細節問題,高低電平啦,信號啦,各種物理特性啦,通通留給電子工程師去關心好啦!
進度
下一步
下一節,我們將通過?多服務器通訊問題?進入?數據鏈路層?的學習。
訂閱更新,獲取更多學習資料,請關注我們的?微信公眾號?:
總結
以上是生活随笔為你收集整理的网络七层协议之物理层的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯C/C++A组省赛历年真题题解(2
- 下一篇: 脚本启动慢_Linux 常用运维脚本,建