IP和TCP包頭校驗和計算方法

2021-06-19 05:18:02 字數 564 閱讀 9964

出處:

校驗和的演算法:

將資料以字為單位累加到乙個雙字中,如果資料長度為奇數,最後乙個位元組要先變成字,然後在加到原來的雙字中,最後得到的結果是乙個雙字,最後將這個雙字的高16位和低16位反覆相加,直到高16位為0,從而就獲得乙個16位的值,再將這個16位的值取反就得到校驗和的值了。

在接收端接收到ip資料報後,要對ip頭進行檢查看是否有誤,所用的演算法與上面一致,不同的是最終的結果要為0。

程式如下:

ushort checksum(ushort* buffer, int size)psd_header;

然後我們將這兩個字段複製到同乙個緩衝區sendbuf中並計算tcp校驗和:

memcpy(sendbuf,&psd_header,sizeof(psd_header));

memcpy(sendbuf + sizeof(psd_header),&tcp_header,sizeof(tcp_header));

tcp_header.th_sum=checksum((ushort *)sendbuf,sizeof(psd_header) sizeof(tcp_header));

IP首部校驗和字段計算方法

ip首部有16bit的校驗和,因此,ip首部以16bit為單位計算校驗和,ip首部的長度一定是16bit的整倍數,這是由於首部長欄位是以32bit為單位計算的,不足的補0。傳送方計算方法 1.首先把校驗和的16bit置0。2.將首部以16bit為單位異或 或模2加,結果相同 3.將異或結果取反,並填...

校驗和計算方法

1.說明 1 校驗和覆蓋的內容 ip校驗和 ip首部。icmp校驗和 icmp首部 icmp資料 2.計算校驗和的步驟 1 把校驗和字段設定為0。2 把需要校驗的資料看成以16位為單位的數字組成,依次進行二進位制反碼求和。3 把得到的結果存入校驗和字段中。另外udp tcp資料報的長度可以為奇數位元...

校驗和的計算方法

校驗和演算法 unsigned short check sum unsigned short addr,int len if nleft 1 sum sum 16 sum 0xffff sum sum 16 answer sum return answer 首先,ip icmp udp和tcp報文頭...