Kalan's Blog

目前主題 亮色

那些比較冷門的 Networking 理論 (1) | 興趣使然的研究之旅

這邊指的冷門,是指對我來說比較少聽到的技術名詞與理論。

對於軟體工程師來說,OSI 七層模型我們通常會在傳輸層以上打交道,像是常見的 TCP/IP、HTTP 協定等等,就算不知道詳細,也大概知道他們是怎麼工作的。相反地,對於 OSI 七層以下的模型就比較少接觸。

不過在實體層,其實要考慮的細節也很多軟體實作更多,尤其是實體訊號傳遞是在一個相對不穩定、充滿雜訊的情況下工作,因此在設計時就必須將這些因素考慮進去。

編碼

資料在網路當中是如何編碼的呢?不管檔案內容是什麼,我們最終都需要將資料轉為高電位或低電位等物理訊號,才能夠實現傳輸。將資料轉為不同的格式或結構,以便於計算機處理,這個過程通常叫做編碼(Encoding)

在電路上也是如此,一般來說我們會將高電位視為 1,低電位視為 0

NRZ(Non-Return-to-Zero)

NRZ 是一種數位通信中的編碼方法,用電壓來表示位元的值。

NRZ 編碼的特點是,在每個單位時間內,信號的電壓保持固定,直到下一個位元時間開始。

這邊很重要的一點在是「單位時間」內,這代表每個 bit 之間的間隔會是固定的。因為對雙方來說,需要一個統一的週期信號,才能知道要怎麼去讀取資料流,否則可能會讀取到完全不一樣的結果。

000000

如果 clock 太快或太慢,都有可能導致資料有誤。然而問題來了,雙方要怎麼知道 clock 頻率是多少?我們雖然可以另外加上一條線來當作 clock 信號,但對於實際應用來說我們希望線越少越好。而且如果資料長時間保持同一個電位,很可能會有失準的問題。

Clock Recovery

在實際應用中,我們會從來源信號來他的原始 clock 頻率是多少,並且由接收器產生對應的週期波並解碼。這個過程叫做 Clock Recovery。

Clock Recovery 大致上可以分為幾個步驟:

  • 偵測 transition,通常可以用一個 delay 電路完成
  • 透過 FFT 轉換來找週期
  • 透過鎖相迴路(Phase-locked loops)同步信號

clock recovery 的詳細原理可以參考維基百科,不過最主要的目的就是當參考信號的頻率有變化時,透過回授來調節相位或頻率,讓兩者一致。

不過這樣也有一個問題,如果資料一直保持高電位或低電位的話,不就完全不知道頻率了嗎?為了解決這個問題,其他編碼方式也有被採用。

Manchester 編碼

既然不想要讓資料流一直保持低電位或高電位,那麼我們就讓電位一直變!Menchester 採用了一種很聰明的方法來判別 0 和 1。

Menchester 是以高低電位的變化當作 01

  • 0:從低電位變化到高電位
  • 1:從高電位變化到低電位

這樣一來,就算原始資料是連續的 0 或 1 也沒關係,因為電位會一直變化,也就可以有效做到 clock recovery。IEEE 802.3 也是採用這種編碼方式。然而這個編碼最致命的缺點就是傳輸頻寬比 NRZ 高出一倍,要在一個週期檢測出高低電位變化,所以實際上需要兩倍頻寬。

4B/5B

如果覺得這篇文章對你有幫助的話,可以考慮到下面的連結請我喝一杯 ☕️ 可以讓我平凡的一天變得閃閃發光 ✨

Buy me a coffee