前面我們瞭解了一些基本通訊機制。為了更系統全面的學習,今天我來看一資料到底在傳輸中是什麼東西,又是怎麼解析的。
章節
- Android與物聯網裝置通訊-概念入門
- Android與物聯網裝置通訊-資料傳遞的本質
- Android與物聯網裝置通訊-網路模型分層
- Android與物聯網裝置通訊-UDP協議原理
- Android與物聯網裝置通訊-TCP協議原理
- Android與物聯網裝置通訊-基於TCP/IP自定義報文
- Android與物聯網裝置通訊-什麼是位元組序
- Android與物聯網裝置通訊- 位元組報文組裝與解析
- Android與物聯網裝置通訊-利用UDP廣播來做裝置查詢
- Android與物聯網裝置通訊-實現遠端控制Android客戶端
- Android與物聯網裝置通訊-Android做小型伺服器
- Android與物聯網裝置通訊-除錯技巧
- Android與物聯網裝置通訊-並行序列與佇列
- Android與物聯網裝置通訊-資料安全
- Android與物聯網裝置通訊-心跳
- Android與物聯網裝置通訊-網路IO模型
目錄
- 數字訊號
- 時鐘訊號
- 訊號衰減和抗干擾
- 包資料MAC幀
我們知道對於計算機來說,所有的資料都是二進位制,非零即一。那麼有沒有想過在資料傳輸中電訊號長什麼樣子呢?
就像這樣的結構,組成所有的資料。
數字訊號
我們的資料由一塊叫網路卡的硬體把資料包轉換成電訊號,通過網線進行傳輸到另一端。 轉換的過程就是電壓和電流的輸出變化。
時鐘訊號
接受端收到訊號的時候會根據訊號時鐘去切割位元訊號,因為當連續的1111 0000 1111
這種情況下接收方就不知道有幾個1,幾個0。所以會根據時鐘訊號去切割。通俗的說這裡的時鐘訊號就是間隔多少算一個位元。
訊號衰減和抗干擾
實際場景在電訊號傳播中會受干擾。現在我們熟悉的計算機網路環境一般是使用RJ-45介面。也就是網口來作為埠。任何在地球上存在的能量都會因為熵導致損失或丟失。那麼一個正常的正方波訊號在傳輸中就會變成彎彎扭扭的線條。這時偉大的人想出了很多辦法來解決這個問題。
其中雙絞線(網線)就是一種優秀的抑制噪聲方案。儘可能的去抗干擾和減少熵丟失,就是兩根線像麻花一樣纏繞在一起可以抵消一部分干擾。深究更細的顆粒度需要讀者自行學習。
包資料MAC幀
這裡的包是指網路資料包,網路包是將電訊號轉換成一組資料後的最基本單位。它的基本結構是這樣的:
- 包頭:各種網路底層的控制資訊
- 資料體:上層資料的一個載體。(網路模型章節詳解)
網路包是一層一層的關係,非常類似俄羅斯套娃的結構,一層層包裹著內部。
我們來看一個網路包中最外層的MAC幀結構:
上面圖中的結構是802.3乙太網幀的結構。我們生活中大部分802.3(有線),802.11(WIFI無線)。其中一組幀允許傳輸1500個位元組,即1500×8位元資料。MAC幀的標準有多種,和歷史包袱,我們只關注現在最常用的就好了。
- 前導碼和幀開始符:作為幀資料的開始標記(防粘包用)。
- 報文頭:接收方MAC地址、傳送方MAC地址、802.1Q可選欄位、乙太網型別
- 負載:資料體,即上層協議的報文頭和資料。(類似俄羅斯套娃)
- 沉餘校驗:32位的迴圈冗餘校驗碼,用於驗證幀資料是否被損壞。
- 幀間距:16個空位元組,用於切割開下一組MAC幀資料,防止粘連。
MAC幀的上層一般裝的是IP頭報文和資料體。其實IP報文和MAC報文有些類似,但是IP報文更加複雜。這是由於網路分層導致的結果。也正式因為這樣才可以讓每一層協議不關注上層協議在做什麼事情,到達解耦的目的。
再往上一層是IP報文結構,感興趣的讀者可以點這裡檢視。整體來看我們的資料就是下面這樣的,也就是我前面提到的俄羅斯套娃結構。
這麼底層的協議和我們開發一個物聯網通訊應用有什麼關係。現在我可以告訴你,其實和寫業務程式碼沒有太大幹系,因為我們是在應用層上做設計。很多時候是基於一些穩定的協議內去做訊息透傳。但是呢,由於這部分是很基礎的核心內容。可以說做android應用層的同學很難真正要碰到要自己去解析它們,一旦碰到了問題,或者硬體工程師和我們溝通起來卻不明白它們在說什麼豈不是很尷尬?嗯哼
下一節我們繼續學習網路模型分層,來領略一下每層結構的意義,會和本節的關聯比較大。