网络七层协议之物理层
我們以一個(gè)非常簡單的例子開始:
兩服務(wù)器通訊問題
如上圖,有兩臺(tái)服務(wù)器,分別是?Server?1?和?Server?2?。 我們先做一個(gè)假設(shè):計(jì)算機(jī)網(wǎng)絡(luò)現(xiàn)在還沒有被發(fā)明出來, 作為計(jì)算機(jī)科學(xué)家的你,想在這兩臺(tái)服務(wù)器間傳遞數(shù)據(jù),怎么辦?
原文地址:https://learn-linux.readthedocs.io 。QQ交流群:Linux網(wǎng)絡(luò)編程,群號(hào):183196643
歡迎關(guān)注我們的公眾號(hào):小菜學(xué)編程 (coding-fan)
這時(shí),你可能會(huì)想到,用一根電纜把兩臺(tái)服務(wù)器連接起來:
物理課大家都學(xué)過,電線可以分為?低電平?和?高電平?。 電平可以高低變化,這樣不就可以傳遞信息了么:?Server?1?控制電纜電平的高低,?Server?2?檢測(cè)電平的高低,這樣就實(shí)現(xiàn)了?Server?1?往?Server?2?發(fā)送數(shù)據(jù)啦!
更進(jìn)一步,可以將高低電平抽象成數(shù)學(xué)語言:我們用低電平表示?0?,高電平表示?1?,這樣就得到一個(gè)理想化的信道:
通過信道,雙方可以傳遞一些?01?比特流。 例子中,我們傳輸?shù)谋忍亓魇?1111010101...?(從右往左看)。 比特流可以編碼任意信息: 比如,我們用?1111?表示告訴對(duì)方本地開機(jī)了,用?0000?告訴對(duì)方本地準(zhǔn)備關(guān)機(jī)了。
到目前為止,我們是不是萬事具備了呢? 一個(gè)比特流信道成為現(xiàn)實(shí)?——理論上是這樣子的。 但是,現(xiàn)實(shí)世界往往要比理想化的模型復(fù)雜一些。
發(fā)送控制
首先,如上圖,信道是無窮無盡的。 因?yàn)?#xff0c;信道狀態(tài)要么為?0?,要么為?1?,沒有一種表示空閑的特殊狀態(tài)。
舉個(gè)例子,如上圖,?Server?1?向?Server?2?發(fā)送比特序列?101101001101?(從右往左讀)。 最后一個(gè)比特是?1?,對(duì)應(yīng)的電平是高電平。 發(fā)送完畢后,由于沒有沒有其他地方改變電纜的電平,所以還是維持高電平狀態(tài)。 也就是說,信道看起來還是按照既定節(jié)拍,源源不斷地發(fā)送?1?(灰色部分),?Server?2?怎么檢測(cè)結(jié)尾在哪里?
我們可以定義一些特殊的比特序列,用于定義開頭結(jié)尾:?101010?表示開頭,?010101?表示結(jié)尾。
這時(shí),?Server?1?先發(fā)送?101010?(紅色),告訴?Server?2?我要開始發(fā)數(shù)據(jù)了; 然后,?Server?1?開始發(fā)送數(shù)據(jù)?1101011?(黑色部分); 最后,?Server?1?發(fā)送?010101?(綠色),告訴?Server?2?數(shù)據(jù)發(fā)送完畢。 注意到,平時(shí)信道為?1?(灰色),也就是代表空閑狀態(tài)。
沖突仲裁
如果兩臺(tái)服務(wù)器同時(shí)往信道里發(fā)送數(shù)據(jù),會(huì)發(fā)生什么事情呢?
肯定沖突了嘛!一臺(tái)發(fā)?0?,一臺(tái)發(fā)?1?,那你說信道到底是?0?還是?1?? 那么,沖突要怎么解決呢?
解決方式也簡單,只需在硬件層面實(shí)現(xiàn)一種機(jī)制:在檢測(cè)到兩臺(tái)服務(wù)器同時(shí)發(fā)送數(shù)據(jù)時(shí),及時(shí)喊停,并協(xié)商到底由哪一方先發(fā)。
總結(jié)
本節(jié)討論了一個(gè)最簡單的模型,解決兩臺(tái)服務(wù)器之間的通訊問題。 通過電纜,在兩臺(tái)機(jī)器間建立了一個(gè)理想的比特流傳輸信道。 這其實(shí)就是網(wǎng)絡(luò)分層結(jié)構(gòu)中最底層——物理層的作用:
- 傳輸比特流
- 依賴物理(電氣)特性
這一層對(duì)開發(fā)人員來說,基本上是透明的,我們只需將其理解成一個(gè)比特流傳輸信道即可。 至于細(xì)節(jié)問題,高低電平啦,信號(hào)啦,各種物理特性啦,通通留給電子工程師去關(guān)心好啦!
進(jìn)度
下一步
下一節(jié),我們將通過?多服務(wù)器通訊問題?進(jìn)入?數(shù)據(jù)鏈路層?的學(xué)習(xí)。
訂閱更新,獲取更多學(xué)習(xí)資料,請(qǐng)關(guān)注我們的?微信公眾號(hào)?:
總結(jié)
以上是生活随笔為你收集整理的网络七层协议之物理层的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯C/C++A组省赛历年真题题解(2
- 下一篇: docker阿里云镜像加速