tcp和udp兩個協議相對應的首部,都有一項是校驗和。
校驗和是幹什麼的? 在接收端收到資料時,判斷協議首部和資料是否被破壞。是在資料報中真實存在的一段資料。
偽首部是幹什麼的? 偽首部用來生成校驗和,偽首部只是一種根據真實的首部的部分資料抽象出來的一種資料結構。並沒有在資料報中真實的存在。
偽首部的構成 tcp的校驗和與udp包的校驗和相似,將下圖中udp包長度改為tcp包長度就是tcp偽首部的構成。
包長度:16位
協議號:8位
由於偽首部的全長是16的倍數(後面解釋為什麼是16),目前是32+32+16+8=88,最近的乙個16的倍數是96,所以需要補8位,偽首部中的填充就是將需要補的8位用0填充。
為什麼偽首部必須是16的倍數? 是因為利用偽首部生成校驗和的流程。流程如下
接收端校驗過程
接收端收到資料後根據tcp首部資料構造出偽首部。重複生成校驗和一直到取反的前一步。將得到的結果值與tcp首部中的校驗和相加,如果是16個1。那麼校驗成功。
tcp udp校驗和以及偽首部介紹
目的是為了發現tcp首部和資料在傳送端到接收端之間發生的任何改動。如果接收方檢測到檢驗和有差錯,則tcp段會被直接丟棄。tcp在計算檢驗和時,要加上乙個12位元組的偽首部。偽首部顧名思義就是假的首部,既不往上傳也不往下傳,只是用於校驗tcp udp報文段。偽首部共有12位元組,包含ip首部的一些字段...
TCP UDP偽首部詳解
最近在讀stevens 的tcp ip詳解,其中介紹到了udp和tcp偽首部但是介紹的不夠詳細,只說是為了udp和tcp校驗和存在的 同時給出了乙個偽首部的圖,是直接加在udp首部前面的,給我的困惑貌似是真實存在的,其實這個圖應該用虛線表示,下面就我的理解,介紹一下偽首部 1.偽首部並非tcp ud...
ip首部校驗和計算
ip首部校驗和的計算方法 1.把校驗和字段清零。2.然後對每16位 2位元組 進行二進位制反碼求和,反碼求和的意思是先對每16位求和,再將得到的和轉為反碼。接下來詳細描述反碼求和的步驟 看下面的 演算法 short checksum ushort buffer,int size if size ck...