楠木軒

知乎日報:數據在電腦內傳輸時都經歷了什麼?

由 漆雕佁 發佈於 經典

  我們來看下圖:

  先看圖 1。

  圖 1 中我們看到了左右兩隻晶體管。這兩隻晶體管均接成開關態,也即它們的工作點要麼是截止,要麼是飽和。當截止時,晶體管的輸出是高電平;當飽和時,晶體管的輸出是低電平。

  注意,這裏的高電平電壓很接近電源電壓,而低電平則略高於低電壓。為了方便,一般用電平來説明晶體管的輸出,而不用電壓值。

  我們看到兩隻晶體管中間的連線很長。這條線又被稱為通信介質。

  我們看到,左邊的晶體管輸入為高電平時,右邊的晶體管輸出亦為高電平;左邊的晶體管輸入為低電平時,右邊的晶體管輸出亦為低電平。這就是通信的傳遞過程。

  再看圖 2。

  圖 2 中,我們看到了處於開關狀態的晶體管符號——反相器。

  普通的反相器,若用於通信,則它每秒鐘需要發生 9600 次的飽和截止(0/1)變化,叫做 9600bps。

  如果通信介質和接口中有九個針孔,我們把它叫做 DB9 接口,則它被稱為串行通信總線;如果通信介質和接口中有 25 個針孔,我們把它叫做 DB25 接口,也即並行通信總線。

  過去,串行總線的通信速率低於並行總線。但現在改進了很多,並行總線反而到很少見到了。

  ISO 國際標準化組織對計算機通信建立了一個模型,這個模型被稱為 ISO 的 OSI 模型(字母順序正好反過來,有點通信的味道在裏面)。OSI 模型的第一層叫做物理層,第二層叫做數據鏈路層,第三層叫做網絡層。第一層、第二層和第三層合併被稱為現場總線。

  我們來看下圖:

  圖中每一層所遵循的規範叫做通信協議。

  看下圖:

  這張圖中,我們看到了物理層的通信接口,並且看到了高電平和低電平。注意哦,這裏的接口是用差分電路來驅動的,不再是簡單的反相器。

  物理層的通信規約是字節。

  一個字節是 8 位二進制數,再加上奇偶校驗位和停止位,則一個字節是 10 位二進制數。

  8 位二進制數換成十進制數是 256。所以一個字節可以傳送 256 種不同的數值狀態。

  物理層的上一層是數據鏈路層。在數據鏈路層裏,把字節編碼組合成為語句,叫做幀。見下圖:

  這裏的幀結構是:START 是起始字節,ADDRE 是地址字節,FUNCTION 是功能碼字節,DATA 是數據字節,CRC 是校驗碼字節,END 是停止字節,最少也有 8 個字節。

  由於一個字節有 10 位,所以一個幀至少有 8X10=80 個位。

  如果某串行通信總線 1 秒鐘可以傳送 9600 個位,則它 1 秒鐘可以傳送 9600/80=120 個幀。

  在網絡層,它把幀組織為分組報文:

  網絡層再往上,就是高層協議了,這些協議中傳遞的都是報文。

  在遊戲中,軟件使用的是高層協議,與現場總線協議完全不同。