IP報文首部校驗和計算:

上圖為IP首部結構,
16位首部校驗和計算方法如下:
將圖中按照16位進行分組,然后校驗和位清零,將資料按16位一組進行累加,最后得出一個結果,如果此結果高16位為0,則將結果按位取反后填入16位首部校驗和位置;如果高16位不為0,則將高16位與低16位相加,再看得出結果高16位是否為0,如果不為零則繼續相加,直到高16位為0,然后將結果按位取反后填入16位首部校驗和位置,

上圖為一個tcp報文的抓包,提取其中ip報文,從第一行45 00到第三行a8 1c為ip報文,按照上述進行累加:4500H+0034H+d7f7H+4000H+4006H+0000H+c0a8H+a81dH+c0a8H+a81cH=46EBAH,此時高16位不為0,則6EBAH+0004H=6EBEH,取反后為9141H,與抓包16位首部校驗和一致,
TCP、UDP報文校驗和計算:
TCP和UDP報文計算方法與IP首部校驗和計算方法類似,不過校驗內容是偽首部+tcp/udp首部+資料,其中偽首部是從ip報文中提取的部分資料,偽首部是為了計算檢驗和而設定的,其結構如下:

其中除了16位TCP/UDP長度其余資料均直接取自IP報文首部,16位TCP/UDP長度計算方法:IP首部16位總長度-4位首部長度*4,TCP首部結構如下:

16位校驗和計算方法:從偽首部結構開始計算累加到資料末尾,然后對高16位進行判斷,不為零則按照IP16位首部校驗和方法進行計算,直到高16位為0,然后對資料取反,將資料填入16位校驗和,
同樣使用IP首部校驗和中的抓包資料:c0a8H+a81dH+c0a8H+a81cH+0006H+(0034H-20=20H)+b9f6H+ee4aH+0762H+19f8H+79b2H+19afH+8010H+0559H+0000H+0000H+0101H+080aH+fffeH+d08bH+ffffH+f2b6H=9805CH,805CH+9H=8065,取反后為7F9AH與抓包資料一致,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323386.html
標籤:其他
上一篇:用戶畫像資料埋點demo(網站用戶行為日志采集和后臺日志nginx服務器搭建)
下一篇:【計算機網路】1概述
