1. 程式人生 > 其它 >【計網】封裝成幀以及透明傳輸

【計網】封裝成幀以及透明傳輸

封裝成幀以及透明傳輸

定義

封裝成幀是指將資料鏈路層將上層交付的協議資料單元新增幀頭和幀尾使之成為幀。

  • 類比理解:不妨將上層交付的協議資料單元比作新出爐的糖果,所新增的幀頭和幀尾比作用來包裝這顆糖果的包裝紙。

  • 再進一步,一定數量的糖果可能會被放入到一個統一規格的糖果罐裡面來進行銷售,這個罐就相對糖果紙擁有更大的面積去闡明生產地,生產日期和生產成分等等因素。

  • 更進一步,可以將好幾個罐頭裝入到快遞箱子裡面經由貨車送到批發處,再有批發處進行解包裝,然後批發到各個小零售點。

  • 最後,可能是由你購買了這款糖果,並揭開了最後的糖果紙。

  • 總的來說,我們不管是給糖果套上糖果紙,還是裝入糖果罐,抑或是放入到快遞箱裡面,都給這個糖果附加上了一些資訊。(漂亮的糖果紙暗示其可口味道,糖果罐交代了相關背景資訊,快遞箱交代送貨地址......)

  • 而打包好進快遞箱的糖果最終會被送到對應的批發點,而批發點會將這些快遞箱開啟單罐單罐銷售給零售店,最終你可能在這些零售點裡面的之一買到了這種型別的糖果罐,並撬開糖果罐,揭開最後的糖果紙,品嚐到了糖果。(解封裝)

實際過程

在實際傳輸過程中幀總是以01串的形式進行傳輸的,為避免幀和幀之間的雜糅,幀往往會在幀頭和幀尾新增標誌位,以告訴接收方某個幀開始接收的位置和某個幀停止接收的位置。

比如就PPP幀而言,它就在幀頭和幀尾各設定了一個長度為1位元組的標誌位。

當接收方掃描到的資訊是標誌位所代表的資訊的時候,接收方就開始明白說這是一個幀的開始或者結束。

也就是說幀頭和幀尾能夠確定一個幀的大致的範圍,也就是所說的幀定界功能。

但並不是所有的幀都具有幀定界功能。

比如說乙太網V2的mac幀

它是將mac幀生成對應的前導碼(幀開始定界符和時鐘同步碼),通過一定時間間隔來確定mac幀結束的位置。

而對於有幀定界的幀來說,要是幀內部出現了和幀邊界相同的資訊的話,也就是說接收方可能提早確定出幀結束的標誌,從而提早結束當前幀,停止讀入,使得後續資訊的丟失,並且擾亂到了後面的幀。

而我們又該如何解決這個問題呢?

首先,我們會將要傳輸過去的資訊進行一個掃描,如是內部出現了flag,會在這個flag前面附加上一個轉義字元,用來告訴接收方這並不是一個真正的flag,不必當真。

  • 其中轉義字元ESC佔一個位元組,其值位27,十六進位制表示即為1B(H)。
  • ESC並非是由E、S和C三個字母組成。

而這其實也叫做透明傳輸

下面引入百度百科對透明傳輸的一段定義

透明傳輸是指不管所傳資料是什麼樣的位元組合,都應當能夠在鏈路上傳送。當所傳資料中的位元組合恰巧與某一個控制資訊完全一樣時,就必須採取適當的措施,使接收方不會將這樣的資料誤認為是某種控制資訊。這樣才能保證資料鏈路層的傳輸是透明的。

再淺談一下個人的理解

個人理解 個人認為這裡的"透明"是一種主觀上的透明,傳輸資料者人是不知道資料在鏈路傳送的過程是選擇哪一條道路,受到哪些裝置的加工,解封裝,再封裝,但始終相信傳輸的資料並不會被中間客動手動腳,始終相信傳輸地資料並不會受到實質性的改變,於是原本看似複雜的傳輸過程就可以看成將資料直接從源傳送到目的地一樣(就好像透明一樣能夠預知結果,但還是無法獲悉具體地傳輸過程,但其實這也算是無關緊要)。

類比 就好像從網上下單的商品一樣,從發貨地到你接收到它的時候並沒有在傳輸過程中受到任何損傷。你就可以直接將它半信半疑的透明化(你壓根就不知道或者不想知道它到底是怎麼被傳輸的)

透明傳輸的實現

零位元填充法

例如將幀定界設定為0111110,然後將01串(傳輸資料)進行掃描,若發現存在連續的5個1就在其後新增一個0,作為接收方用來重新整理的資料的標誌。

  • 實際運用

參考

B站_湖科大教書匠