數據包在數據鏈路上傳輸時,發送端的數據鏈路層須要給每一個從網絡層獲得的包加上開始和結束的標記,接收端端根據標記把數據解析成不一樣的數據包遞交給網絡層。數據包通過網絡層封裝以後稱爲一個數據幀,結構以下:算法
幀頭 | 源物理地址 | 目標物理地址 | 數據包協議類型 | 數據包 | 幀檢驗序列 | 幀尾 |
上面提到的幀頭和幀尾,其實是在網絡協議中約定好的一些特殊字節做爲標識符(例如01111110)。若是數據包中的數據也包含這與幀頭和幀尾相同的字節該如何處理呢?爲了解決這些問題,數據層在封裝數據包的時候若是發現包中有存在跟幀頭幀尾相同的字節,會在這些特殊體特前面再加上一些特殊的填充字節用於提示接收端這並非幀頭和幀尾,這很像編程語言中轉義字符"\"。接收端在接收的時候會去掉這些"轉義字符",把數據包原樣遞交給上層。這整個過程對於數據鏈路層之上的數據層是徹底無感知的,因此稱爲透明傳輸。編程
假如幀頭和幀尾的標識符是01111110,也能夠採用0比特填充法,來避免數據中出現標識符。只要數據中有5個連續的1比特,就在後面填充一個0,接收端若是發現有5個連續的1比特,切後面跟着0bit,就把這個0bit去掉,以此來實現透明傳輸。網絡
數據在物理介質上傳輸的時候收的時候,因爲信道噪聲的存在,必定會出現錯誤的比特。傳輸錯誤的比特佔所傳輸比特總數的比率稱爲誤碼率。檢測和糾正傳輸中的錯誤比特的功能是在數據鏈路層來實現的。併發
差錯檢測和糾正是經過在數據幀中封裝上幀檢驗序列(冗餘碼)來實現的,冗餘碼在數據幀中的位置是在數據包以後幀尾以前。通常是使用循環冗餘校驗CRC。接收端根據檢測算法來判斷是否有錯誤的比特。這個算法只能知道是否存在錯誤的比特,可是沒法知道哪個比特出錯,發現錯誤後只能丟棄數據幀,進一步就須要傳輸層的排序和重傳機制來保證傳輸的可靠性。編程語言
另外,還有一些帶有糾錯能力的差錯檢測編碼,與上面相似也是在數據幀中附加幀檢驗序列,這種編碼有必定的機率能夠檢測到具體是哪一個比特在傳輸中出現了錯誤,以減小數據鏈路層對數據幀的丟棄。以太網協議沒有實現糾錯,由傳輸層來保證傳輸的可靠性。優化
因爲數據鏈路層不能保證它上面的協議層的可靠性傳輸,能夠不實現接收確認機制,由高層來實現可靠性傳輸。例如TCP/IP協議中傳輸層的可靠性傳輸服務。編碼
廣域網採用點到點通訊機制。cdn
用戶使用撥號電話線接入因特網(ADSL)時,通常使用PPP協議。PPP協議除了前面介紹的數據鏈路層功能以外,還包含了鏈路控制協議(可用於用戶身份驗證和計費)、網絡控制協議(如協商分配IP地址等)等細分的協議層。blog
局域網採用廣播機制 - 以太網協議,以太網協議組中主要包含MAC協議,一個數據幀也能夠稱爲一個MAC幀。排序
共享通訊媒體接入:
靜態劃分網絡(通常不採用,加入新的機器須要從新劃分資源)
動態接入:
以太網:
優化的以太網:
前面提到多個設備同時發送數據時,信號會在總線上產生碰撞。若是使用交換機組網,交換機能夠根據mac地址轉發數據,信號不會擴散到網絡內的其餘設備,因此多個設備能夠同時發送數據,並且支持全雙工通訊。目前交換機是主流的以太網組網設備。