TCP校驗和字段

2021-06-21 21:47:44 字數 1107 閱讀 3230

1、1的補碼用在tcp、ip的校驗和中,而平時學習的補碼時 2 的補碼,即整數的補碼和原碼相同,負數的補碼按位取反加 1(符號位不變)。

2、1的補碼:是乙個對稱的系統,即乙個數和其相反數(1的補碼)相加結果一定為 0。0分為正 0和負 0,校驗和的計算原理就是基於此,即待傳送資料的 1 的補碼表示法和其相反數 1 的補碼相加結果一定為 0,例如0111111111111111(+32767)按位取反即得到1000000000000000(-32767),於是二者相加的結果為1111111111111111(-0)。

3、ip 校驗和演算法:

ip 校驗演算法將待傳送的資料按 16bit(0xffff)進行累加,若產生進製,則對進製 位繼續累加直到無進製為止,最後將產生的累加和按位取反,得到待傳送資料的校驗和,並且校驗和的值連同待傳送資料一起傳送給資料接收方。接收方在收到資料後,按 16 bit依次累加收到的資料,若累加結果為 -0,表示資料傳輸過程中沒有發生錯誤,否則認為資料有錯,丟棄該資料。

4、舉例:

序列:0800  04 00  14 00  61 62  63 64(16進製制)

1.對此序列按16bit累加:

0800 

04 00

14 00

61 62

+ 63 64

----------------

e4 c6

2.對累加結果按位取反:0x1b39

3.e4 c6 + 1b 39 = ff ff

5、程式:

/* 校驗和 */

u16 checksum(u8 *buf/*待傳送資料的快取指標*/, int len/*待傳送資料的長度*/)

/* 當len為奇數時用最後乙個位元組進行補齊 */

if(len)

sum+=*(u8 *)cbuf;/*用最後 1 個位元組補齊*/

//判斷是否有 16 bit加法溢位,若有則將進製位繼續累加直到無進製

sum=(sum>>16)+(sum & 0xffff);

sum+=(sum>>16); /*

while(sum >> 16)

sum=(sum>>16)+(sum & 0xffff);

*/return ~sum;

}

表單字段校驗

字段校驗唯一 controlle層中 檢驗視窗編號是否重複 param winnum 視窗編號 param id 視窗id return responsebody public boolean checkusername integer winnum,integer id 2 service層中直接...

Java欄位校驗工具

當前對欄位校驗僅支援非空和字段長度的校驗 fieldvaild注釋 為了能保證對物件所有欄位都有自定義配置是否校驗,需要自定義註解 校驗注釋 author tu retention retentionpolicy.runtime target public inte ce fieldvaild在使用...

Hive欄位校驗測試

結論 1.如果是varchar型別長度短於檔案中字段長度,通過hql查詢時,會直接截斷超過varchar型別長度的字元顯示 2.如果表字段型別和hdfs檔案中資料型別不匹配,則直接顯示null drop table tmp.test0713 create table tmp.test0713 pk ...