未使用TLS協議是否意味着數據傳輸可能會出錯?

起因

背景信息

以太網幀格式、IP數據包格式、TCP/UDP數據段格式

  • 以太網數據格式與封裝解封
    • 物理層
      • 無檢錯無糾錯
    • 數據鏈路層
      • CRC校驗、強校驗,檢查比特差錯,Cut-Through轉發不校驗;
        • 檢測該幀是否出現差錯,佔 4 個字節(32 比特)。發送方計算幀的循環冗餘碼校驗(CRC)值,把這個值寫到幀裏。接收方計算機重新計算 CRC,與 FCS 字段的值進行比較。如果兩個值不相同,則表示傳輸過程中發生了數據丟失或改變。
    • 網絡層
      • Checksum校驗,弱校驗,只覆蓋IP頭部(不包括 IP 數據),IPv6 無此機制;
    • 傳輸層
      • Checksum校驗,弱校驗,覆蓋頭部和數據,TCP的校驗和是必需的,而UDP的校驗和在IPv4中是可選的,在IPv6中則是強制的。
        • TCP和UDP計算校驗和時,都要加上一個12字節的僞首部,包含如下信息:源IP地址、目的IP地址、保留字節(置0)、傳輸層協議號(TCP是6)、TCP報文長度(報頭+數據)。
        • 僞首部是爲了增加TCP校驗和的檢錯能力:如檢查TCP報文是否收錯了(目的IP地址)、傳輸層協議是否選對了(傳輸層協議號)等。

傳輸層安全協議

  • 消息驗證碼( MAC ,如 HMAC ),強校驗,檢查某段消息的完整性以及作身份驗證

二層交換

  • MAC幀經過路由器/二層交換機時IP地址和MAC地址的變化
    • 二層交換機工作在數據鏈路層,只負責數據幀轉發(重要!),交換機端口沒有MAC地址,更沒有IP地址。
    • 二層數據幀是由主機封裝的,以HTTP通信爲例(假設直接使用IP訪問),IP頭的dest ip和url中的ip一致,通過查詢本地路由表決定發送網卡後,src mac和src ip也決定了,dest mac是下一跳設備的mac(可能是目的設備的mac,也可能是默認網關的MAC)

三層轉發

3. 問題淺析

  • 網絡層次與專業名稱 image

  • 談一談網絡編程學習經驗 - TCP的可靠性有多高

    • 以太網的CRC32只能保證同一個網段上的通信不會出錯(兩臺機器的網線插到同一個交換機上,這時候以太網的CRC是有用的)✅
      • 當數據經過二層交換機時,在整個鏈路的數據傳輸過程當中,源IP、目的IP、源MAC、目的MAC地址都不改變,二層數據幀的內容和大小都是不變的,接收端接收到新幀後進行CRC校驗,只檢錯不糾錯,正確就轉發,錯誤就丟棄
    • 路由器可能出現硬件故障,比方說它的內存故障(或偶然錯誤)導致收發IP報文出現多bit的反轉或雙字節交換,這個反轉如果發生在payload區,那麼無法用鏈路層、網絡層、傳輸層的check sum查出來,只能通過應用層的check sum來檢測。✅
      • 由於IP頭部的TTL經過路由器時必然減一,IP Checksum需要重新計算,如果路由器處理數據包發生錯誤,那麼生成的Checksum也是錯誤的,接收者無法通過檢查IP Checksum發現這一錯誤
      • 在進行NAT時,會重新計算TCP Checksum,此時設備發生錯誤,那麼生成的TCP Checksum也是錯誤的,接收者無法通過檢查TCP Checksum發現這一錯誤
        • 源網絡地址轉換SNAT,src ip會發生變化
        • 目的網絡地址轉換DNAT,dest ip會發生變化
        • 端口地址轉換PAT,src port會發生變化

相關鏈接:

接下去的內容

  • CRC和Checksum的算法實現
  • IP、TCP/UDP的具體結構
  • TLS詳解
  • TCP/IP詳解

吐槽

我一個CRUD Boy和API Caller,既不回去當網工,又寫不了網絡編程,存儲是補課罷了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章