【轉載】TCP&UDP僞首部詳解

最近在讀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就丟棄收到的數據報。但是不生成差錯報文,由上層去發現丟失的數據報並進行重傳。

 

轉載:http://hi.baidu.com/wufen1981/blog/item/6c615bca08bc7482c917689c.html

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