這邊指的冷門,是指對我來說比較少聽到的技術名詞與理論。
對於軟體工程師來說,OSI 七層模型我們通常會在傳輸層以上打交道,像是常見的 TCP/IP、HTTP 協定等等,就算不知道詳細,也大概知道他們是怎麼工作的。相反地,對於 OSI 七層以下的模型就比較少接觸。
不過在實體層,其實要考慮的細節也很多軟體實作更多,尤其是實體訊號傳遞是在一個相對不穩定、充滿雜訊的情況下工作,因此在設計時就必須將這些因素考慮進去。
資料在網路當中是如何編碼的呢?不管檔案內容是什麼,我們最終都需要將資料轉為高電位或低電位等物理訊號,才能夠實現傳輸。將資料轉為不同的格式或結構,以便於計算機處理,這個過程通常叫做編碼(Encoding)
在電路上也是如此,一般來說我們會將高電位視為 1
,低電位視為 0
。
NRZ 是一種數位通信中的編碼方法,用電壓來表示位元的值。
NRZ 編碼的特點是,在每個單位時間內,信號的電壓保持固定,直到下一個位元時間開始。
這邊很重要的一點在是「單位時間」內,這代表每個 bit 之間的間隔會是固定的。因為對雙方來說,需要一個統一的週期信號,才能知道要怎麼去讀取資料流,否則可能會讀取到完全不一樣的結果。
如果 clock 太快或太慢,都有可能導致資料有誤。然而問題來了,雙方要怎麼知道 clock 頻率是多少?我們雖然可以另外加上一條線來當作 clock 信號,但對於實際應用來說我們希望線越少越好。而且如果資料長時間保持同一個電位,很可能會有失準的問題。
在實際應用中,我們會從來源信號來猜他的原始 clock 頻率是多少,並且由接收器產生對應的週期波並解碼。這個過程叫做 Clock Recovery。
Clock Recovery 大致上可以分為幾個步驟:
clock recovery 的詳細原理可以參考維基百科,不過最主要的目的就是當參考信號的頻率有變化時,透過回授來調節相位或頻率,讓兩者一致。
不過這樣也有一個問題,如果資料一直保持高電位或低電位的話,不就完全不知道頻率了嗎?為了解決這個問題,其他編碼方式也有被採用。
既然不想要讓資料流一直保持低電位或高電位,那麼我們就讓電位一直變!Menchester 採用了一種很聰明的方法來判別 0 和 1。
Menchester 是以高低電位的變化當作 0
和 1
0
:從低電位變化到高電位1
:從高電位變化到低電位這樣一來,就算原始資料是連續的 0 或 1 也沒關係,因為電位會一直變化,也就可以有效做到 clock recovery。IEEE 802.3 也是採用這種編碼方式。然而這個編碼最致命的缺點就是傳輸頻寬比 NRZ 高出一倍,要在一個週期檢測出高低電位變化,所以實際上需要兩倍頻寬。