校驗和是在哪一層計算的?Whereareyou1664792852019-09-19 10:34:50

UDP計算校驗和的方法和計算IP資料報首部校驗和的方法相似。但不同的是:IP資料報的校驗和只檢驗IP資料報的首部,但UDP的校驗和是將首部和資料部分一起都檢驗。在傳送端,首先是將全零放入檢驗和欄位。再將偽首部以及UDP使用者資料報看成是由許多16bit的字串接起來。若UDP使用者資料報的資料部分不是偶數個位元組,則要填入一個全零位元組(即:最後一個基數字節應是16位數的高位元組而低位元組填0)。然後按二進位制反碼計算出這些16bit字的和(兩個數進行二進位制反碼求和的運算的規則是:從低位到高位逐列進行計算。0和0相加是0,0和1相加是1,1和1相加是0但要產生一個進位1,加到下一列。若最高位相加後產生進位,則最後得到的結果要加1)。將此和的二進位制反碼寫入校驗和欄位後,傳送此UDP使用者資料報。在接收端,將收到的UDP使用者資料報連同偽首部(以及可能的填充全零位元組)一起,按二進位制反碼求這些16bit字的和。當無差錯時其結果應全為1。否則就表明有差錯出現,接收端就應將此UDP使用者資料報丟棄(也可以上交給應用層,但附上出現了差錯的警告)。

TCP的校驗和計算方法同UDP一樣,同樣要加上一個偽頭部,區別是偽頭部的協議碼是0x06,長度是整個TCP報文的長度(包含TCP頭部)。

ICMP的校驗和

ICMP校驗和的計算方法一樣,只不過只是對ICMP包整個進行校驗和,沒有偽頭部,也不包括IP包頭部。