最近在讀stevens 的tcp/ip詳解,其中介紹到了udp和tcp偽首部但是介紹的不夠詳細,只說是為了udp和tcp校驗和存在的 ,同時給出了乙個偽首部的圖,是直接加在udp首部前面的,給我的困惑貌似是真實存在的,其實這個圖應該用虛線表示,下面就我的理解,介紹一下偽首部:
1. 偽首部並非tcp&udp資料報中實際的有效成分。偽首部是乙個虛擬的資料結構,其中的資訊是從資料報所在ip分組頭的分組頭中提取的,既不向下傳送也不向上遞交,而僅僅是為計算校驗和。
這樣的校驗和,既校驗了tcp&udp使用者資料的源埠號和目的埠號以及tcp&udp使用者資料報的資料部分,又檢驗了ip資料報的源ip位址和目的位址。偽報頭保證tcp&udp資料單元到達正確的目的位址。因此,偽報頭中包含ip位址並且作為計算校驗和需要考慮的一部分。最終目的端根據偽報頭和資料單元計算校驗和以驗證通訊資料在傳輸過程中沒有改變而且到達了正確的目的位址。
2.偽首部,更確切的說是校驗和包含的—個96位的偽首標,是個理論上的值,只是理論上它位於tcp&udp首標的前面。這個偽首標包含了源位址、目的位址、協議和tcp&udp長度等字段,這使得tcp&udp能夠防止出現路由選擇錯誤的資料段。這些資訊由網際協議(ip)承載,通過tcp&udp網路介面,在ip上執行的tcp&udp呼叫引數或者結果中傳遞。
附:校驗和計算方法,以ip首部為例
為了計算乙份資料報的ip檢驗和,首先把檢驗和字段置為0。然後,對首部中每個16bit進行二進位制反碼求和(整個首部看成是由一串16bit的字組成),結果存在檢驗和字段中。當收到乙份ip資料報後,同樣對首部中每個16bit進行二進位制反碼的求和。由於接收方在計算過程中包含了傳送方存在首部中的檢驗和,因此,如果首部在傳輸過程中沒有發生任何差錯,那麼接收方計算的結果應該為全1。如果結果不是全1(即檢驗和錯誤),那麼ip就丟棄收到的資料報。但是不生成差錯報文,由上層去發現丟失的資料報並進行重傳。
TCP UDP 校驗和 偽首部
tcp和udp兩個協議相對應的首部,都有一項是校驗和。校驗和是幹什麼的?在接收端收到資料時,判斷協議首部和資料是否被破壞。是在資料報中真實存在的一段資料。偽首部是幹什麼的?偽首部用來生成校驗和,偽首部只是一種根據真實的首部的部分資料抽象出來的一種資料結構。並沒有在資料報中真實的存在。偽首部的構成 t...
tcp udp校驗和以及偽首部介紹
目的是為了發現tcp首部和資料在傳送端到接收端之間發生的任何改動。如果接收方檢測到檢驗和有差錯,則tcp段會被直接丟棄。tcp在計算檢驗和時,要加上乙個12位元組的偽首部。偽首部顧名思義就是假的首部,既不往上傳也不往下傳,只是用於校驗tcp udp報文段。偽首部共有12位元組,包含ip首部的一些字段...
IP首部詳解
4位版本 4 位首部長度 8 位服務型別 tos 16 位總長度 16 位識別符號 3 位標誌 13位片偏移 8 位生存時間 8 位協議 16位首部檢驗和 32 位源ip位址 32位目的 ip位址 32 位選項 若有 資料 首都長度 ip首部的長度,一般為 20b.版本 ip位址的版本,目前我們使用...