一、不歸零制編碼(Non-Return to Zero)
對于不歸零制編碼是最簡單的一種編碼方式,正電平代表1,負電平代表0。如下圖:
其實在不歸零制編碼中有一個很明顯的缺陷,那就是它不是自同步碼。
對于上圖,你知道它傳輸的數據是什么嗎?你可以回答說是一串“1”的序列,但是你卻不知道它有多少個“1”,這就是NRZ編碼的缺陷。
所以為了知道它到底有多少個“1”,我們必須對照時鐘序列進行比對。對于計算機而言也是如此,如果采用NRZ編碼進行傳輸數據,一般情況下計算機有幾種方式進行時鐘同步。
1、增加一對線傳輸時鐘序列
這種同步方式必須保證時鐘相位(clock phase)與數據一致。但是在實際的傳輸過程中,時鐘相位可能會發生偏差,可能是由于采用了不同的線路或者是導電率不同等原因,特別的當在較長的線路以較高的傳輸速率進行傳輸時,發生時鐘偏差的概率會變大或者說偏差會更明顯。在時鐘發生偏差的情況下,計算機就會誤讀一些位。
2、通過GPS天線進行時鐘同步
優點:精確的時間 + 頻率同步
缺點:增加了額外的硬件設施
3、計算機內置原子時鐘(這種做法相當少見)
二、曼徹斯特編碼(Manchester Code)
曼徹斯特編碼用信號的變化來保持發送設備和接收設備之間的同步,也有人稱之為自同步碼( Self-Synchronizing Code)。
關于曼徹斯特編碼有四點最基本的你需要知道:
1、每個比特(bit)的發送時間恒定(“周期”)
2、0 用低至高轉換表示,1 用高至低轉換表示(根據G.E.Thomas方式---IEEE 802.3方式與之相反)
3、表示 0 或 1 的轉化出現在周期的中點
4、周期開始的轉換不表示數據
三、HDLC(High level Data Link Control)
HDLC是計算機網絡中國常用的一種傳輸模式。在HDLC傳輸模式中它標志了一個幀定界符(一個flag),在幀開始和結束的地方都放一個幀定界符,這樣計算機就會知道哪里是幀開始以及結束的地方。
幀定界符:01111110(二進制)-> 7E(十六進制)
這是一個幀的示例:
???????01111110......(0、1代碼)......01111110
(幀定界符之間的0、1代碼包括要傳輸的數據以及一些其他信息)
零比特填充法:
那么,就會出現一個問題:如果在幀的中間(不包括幀定界符)的地方也出現了 ...01111110... 怎么辦呢?一般采用零比特填充 的方式,即如果幀中間出現了 111111(五個連續的“1”),那么就在第五個“1”后面加一個“0”,這樣在幀定界符中間就不會出現六個連續的“1”,自然也不可能出現 01111110 。
當接收端接收到比特流時,如果發現五個連續的“1”,就刪除掉后面的一個“0”,從而恢復原來的數據。
HDLC幀結構:幀標志F -> 地址A-> 控制C -> 信息Info -> 幀檢驗序列FCS -> 標志F
幀標志F(flag):即幀定界符 01111110(二進制)-> 7E(十六進制)
地址A(address):地址字段。
控制C(control):控制字段,用于構成各種命令及響應,以便對鏈路進行監視與控制。發送方主節點或組合節點利用控制字段來通知被尋址的從節點或組合節點執行約定的操作;相反,從節點用該字段作為對命令的響應,報告已經完成的操作或狀態的變化。該字段是HDLC的關鍵。由于Control字段的構成不同,可以把HDLC幀分為三種類型:信息幀、監控幀、無編號幀,分別簡稱I幀(Information)、S幀(Supervisory)、U幀(Unnumbered)。在控制字段中,第1位是“0”為I幀,第1、2 位是“1 ”為S幀,第1、2位是“11”為U幀。
信息幀(I幀):信息幀包含用戶數據、該幀的編號和捎帶的應答序列N(R)。
管理幀(S幀):管理幀負責流量控制和差錯控制,管理幀有4種,包括接收就緒(RR)、接收未就緒(RNR)、拒絕接收(REJ)和選擇性拒絕接收(SREG)。
無編號幀(U幀):U幀用于鏈路控制。
信息Info:長度不做限定
幀檢驗序列FCS:用于對幀標志F之間的整個序列進行檢驗
四、EhternetⅡ型以太網幀結構
幀間間隙IFG(inter-frame gap):在互聯網幀的開頭,有一段幀間間隙IFG(inter-frame gap)或IPG(inter-packet gap)。它的特點是:這是一段沉默的時間,沒有任何數據被傳輸(電壓為0),并且任何一個網絡要求這一段時間至少是 96bit 的IFG。每發完一個幀后要等待一段時間才能再發另外一個幀,以便讓幀接收者對接收的幀作必要的處理(如調整緩存的指針、更新計數、通知對報文進行處理等等)。幀間間隙不屬于EhternetⅡ型以太網幀結構中。
前導碼(preamble):七個字節,在這一段沉默的時間結束后,以太網開始發送 前同步碼 或者叫 前導碼(preamble),前導碼用十六進制表示就是:AA AA AA AA AA AA AA。7個字節的作用是同步時鐘,和發送端保持時鐘同步。
幀開始定界符:一個字節,幀開始定界符用十六進制表示就是 AB 。幀開始定界符和前導碼從二進制來看,僅有一位不同。
AA -> 1010 1010
AB -> 1010 1011
MAC目標地址:接收方的地址
MAC源地址:發送方的地址
類型:用于標志上一層使用的是什么協議,以便把收到的幀的數據上交給上一層的這個協議
幀檢驗序列FCS:用于檢驗幀序列是否發生差錯,當傳輸媒體的誤碼率為時,MAC子層可使未檢測到的差錯小于。
部分信息摘自百度百科。
部分信息參考網名為:Ben Eater 的youtuber的講解
Ben Eater的youtube網址如下:
https://www.youtube.com/playlist?list=PLowKtXNTBypGqImE405J2565dvjafglHU
圖文:ZJL