456成人影院在线观看_亚洲a毛片_日韩9999_伊人网老司机_一本免费视频_最近高清日本免费

IT之道-艾銻知道

您當前位置: 主頁 > 資訊動態 > 艾銻分享 >

IP、ICMP、UDP、TCP 校驗和算法分享-IT運維


2020-06-03 20:34 作者:admin 瀏覽量:

IP、ICMP、UDP、TCP 校驗和算法分享-IT運維

 
IT運維工作,以服務為中心,以穩定、安全、高效為三個基本點,確保公司的互聯網業務能夠 7×24 小時為您提供高質量的服務。
 
下面由網絡運維工程師為您講解專業的解決方案 
 
以前看計算機網絡相關的書,每次看到IP或者UDP報頭校驗和時,都一瞥而過,以為相當簡單,不就是16bit數據的相加嗎。最近在研究《TCP/IP詳解 卷1:協議》這本書,看到校驗和是16bit字的二進制反碼和(暈,以前都沒注意原來是反碼和,看來以前看書不仔細啊!罪過,罪過~~),覺得很奇怪,為什么會用反碼和,而不是直接求和呢?(因為我認為TCP/IP協議里面的算法和思想一般都是非常經典的,人家這么做一定有原因的)下面就來探索一下這個校驗和算法具體怎么實現的。
 首先,IP、ICMP、UDP和TCP報文頭部都有校驗和字段,大小都是16bit,算法也基本一樣:
 在發送數據時,為了計算數據包的校驗和。應該按如下步驟:
(1)把校驗和字段置為0;   
(2)把需校驗的數據看成以16位為單位的數字組成,依次進行二進制反碼求和;   
(3)把得到的結果存入校驗和字段中。   
在接收數據時,計算數據包的校驗和相對簡單,按如下步驟:   
(1)把首部看成以16位為單位的數字組成,依次進行二進制反碼求和,包括校驗和字段;   
(2)檢查計算出的校驗和的結果是否為0;   
(3)如果等于0,說明被整除,校驗是和正確。否則,校驗和就是錯誤的,協議棧要拋棄這個數據包。
 雖然上面四種報文的校驗和算法一樣,但在作用范圍存在不同:IP校驗和只校驗20字節的IP報頭;而ICMP校驗和覆蓋整個報文(ICMP報頭+ICMP數據);UDP和TCP校驗和不僅覆蓋整個報文,而且還有12字節的IP偽首部,包括源IP地址(4字節)、目的IP地址(4字節)、協議(2字節,第一字節補0)和TCP/UDP包長(2字節)。另外UDP、TCP數據報的長度可以為奇數字節,所以在計算校驗和時需要在最后增加填充字節0(注意,填充字節只是為了計算校驗和,可以不被傳送)。
這里還要提一點,UDP的校驗和是可選的,當校驗和字段為0時,表明該UDP報文未使用校驗和,接收方就不需要校驗和檢查了!那如果UDP校驗和的計算結果是0時怎么辦呢?書上有這么一句話:“如果校驗和的計算結果為0,則存入的值為全1(65535),這在二進制反碼計算中是等效的。”
講了這么多,那這個校驗和到底是怎么算的呢?
業:IT駐場服務 網絡機房綜合布線 計算機網絡安全維護 解決方案
1. 什么是二進制反碼求和
對一個無符號的數,先求其反碼,然后從低位到高位,按位相加,有溢出則向高位進1(跟一般的二進制加法規則一樣),若最高位有進位,則向最低位進1。
首先這里的反碼好像跟我們以前學的有符號數的反碼不一樣(即正數的反碼是其本身,負數的反碼是在其原碼的基礎上,符號位不變,其余各位取反),這里不分正負數,直接每個位都取反!
上面加粗的那句是跟我們一般的加法規則不太一樣的地方:最高位有進位,則向最低位進1。確實有些疑惑,為什么要這樣做呢?仔細分析一下(為了方便說明,以 4bit二進制反碼求和舉例),上面的這種操作,使得在發生加法進位溢出時,溢出的值并不是10000,而是1111。也即是當相加結果滿1111時溢出,這樣也可以說明為什么0000和1111都表示0了(你同樣可以發現,任何數與這兩個數做二進制反碼求和運算結果都是原數,這恰好符合數0的加法意義)。
下面再舉例兩種二進制反碼求和的運算:
原碼加法運算                                               反碼加法運算
3(0011)+ 5(0101)= 8(1000)      3(1100)+ 5(1010)=  8(0111)
8(1000)+ 9(1001)= 1(0001)      8(0111)+ 9(0110)=  2(1101)
從上面兩個例子可以看出,當加法未發生溢出時,原碼與反碼加法運算結果一樣;當有溢出時,結果就不一樣了,原碼是滿10000溢出,而反碼是滿1111溢出,所以相差正好是1。舉例只是為了形象地觀察二進制反碼求和的運算規則,至于為什么要定義這樣的規則以及該運算規則還存在其它什么特性,可能就需要涉及代數理論的東西的了(嗚嗚~~數學理論沒學好啊,只能從表面上分析分析)。
另外關于二進制反碼求和運算需要說明的一點是,先取反后相加與先相加后取反,得到的結果是一樣的?。ㄊ聦嵣衔覀兊木幊趟惴ɡ铮瑤缀醵际窍认嗉雍笕》?。)
2. 校驗和算法的實現

講了什么是二進制反碼求和,那么校驗和的算法實現就簡單多了。廢話少說,直接上代碼:
 
復制代碼
代碼如下:

[cpp] view plaincopy
//計算校驗和
USHORT checksum(USHORT *buffer,int size)
{
unsigned long cksum=0;
while(size>1)
{
cksum+=*buffer++;
size-=sizeof(USHORT);
}
if(size)
{
cksum+=*(UCHAR *)buffer;
}
//將32位數轉換成16
while (cksum>>16)
cksum=(cksum>>16)+(cksum & 0xffff);
return (USHORT) (~cksum);
}
buffer是指向需校驗數據緩存區的指針,size是需校驗數據的總長度(字節為單位)
4~13行代碼對數據按16bit累加求和,由于最高位的進位需要加在最低位上,所以cksum必須是32bit的unsigned long型,高16bit用于保存累加過程中的進位;另外代碼10~13行是對size為奇數情況的處理!
14~16行代碼的作用是將cksum高16bit的值加到低16bit上,即把累加中最高位的進位加到最低位上。這里使用了while循環,判斷cksum高16bit是否非零,因為第16行代碼執行的時候,仍可能向cksum的高16bit進位。有些地方是通過下面兩條代碼實現的:cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);這里只進行了兩次相加,即可保證相加后cksum的高16位為0,兩種方式的效果一樣。事實上,上面的循環也最多執行兩次!
17行代碼即對16bit數據累加的結果取反,得到二進制反碼求和的結果,然后函數返回該值。
專業:IT機房建設 辦公大樓網絡布線 IT硬件設備維護外包  運維服務方案
3. 為什么使用二進制反碼求和呢?
好了,最后一個問題,為什么要使用二進制反碼來計算校驗和呢,而不是直接使用原碼或者補碼?
這個問題我想了很久,由于水平有限實在弄不明白,于是在百度上一陣狂搜,什么都沒有(不知道是百度不給力,還是大家都不關注這個問題呢?)。果斷換google,敲了3個關鍵詞:why checksum tcp,嘿嘿 結果第二篇就是我想要的文章了?。?!
先把鏈接給大家吧:http://www.netfor2.com/checksum.html
這篇文章主要介紹二進制反碼求和(the 1's complement sum)與補碼求和(the 2's complement sum)的區別,另外還說明了在TCP/IP校驗和中使用反碼求和的優點。
It may look awkword to use a 1's complement addition on 2's complement machines. This method however has its own benefits.
Probably the most important is that it is endian independent. Little Endian computers store hex numbers with the LSB last (Intel processors for example). Big Endian computers put the LSB first (IBM mainframes for example). When carry is added to the LSB to form the 1's complement sum (see the example) it doesn't matter if we add 03 + 01 or 01 + 03. The result is the same.
Other benefits include the easiness of checking the transmission and the checksum calculation plus a variety of ways to speed up the calculation by updating only IP fields that have changed.
上面是原文的一部分,說明在TCP/IP校驗和中使用反碼求和的一些優點:
a. 不依賴系統是大端還是小端。 即無論你是發送方計算或者接收方檢查校驗和時,都不需要調用htons 或者 ntohs,直接通過上面第2節的算法就可以得到正確的結果。這個問題你可以自己舉個例子,用反碼求和時,交換16位數的字節順序,得到的結果相同,只是字節順序相應地也交換了;而如果使用原碼或者補碼求和,得到的結果可能就不相同!
以上文章由北京艾銻無限科技發展有限公司整理
 
 

相關文章

IT外包服務
二維碼 關閉
主站蜘蛛池模板: 亚洲人成在久久综合网站_久久精品人人槡人妻人人玩_久久久www成人免费无遮挡大片_伊人久久综合精品久久_日本逼视频_色啪影院_日本污视频在线观看_av片在线免费看 | 日本欧美一区二区三区在线观看_中国一级毛片黄_国产小u女在线未发育_国产精品无码午夜福利_性xxxx欧美老妇506070_wwwxxx日本在线观看_26uuu成人_97国产精品最好的产品 | 欧美体内she精高潮_99久久九九社区精品_9999国产精品_欧美牲交黑粗硬大_久久综合精品国产丝袜长腿_亚洲中文字慕日产2021_哪里有毛片网站_18video性欧美19sex高清 | 中国一级毛片免费视频_av免费黄色_欧美疯狂做受xxxx_伊人久久视频在线_野花社区www官网在线观看_爆乳情帝国网综合社区_欧美性xxxx极品高清_欧美一级爱爱视频 | 91夜夜夜_久久久久夜夜夜_www.99热这里只有精品_亚洲欧美一区二区三区在线观看_自拍偷拍第八页_日韩一级片毛片_色播亚洲视频在线观看_波多野结衣AV一区二区全免费观看 97中文字幕第十二页_日日天天_九七九色丨麻豆_日本线在线_少妇MM被擦出白浆液视频_一个人看www在线视频_91精品国产91久久久久久黑人_男人操女人免费网站 | 精品国产日韩专区欧美第一页_亚洲丰满少妇xxxxx高潮对白_国产xxxx搡xxxxx搡麻豆_另类视频一区二区三区_伦理片一区二区三区_国产中文区4幕区2023_精品福利视频一区二区三区_美国十次狠狠色综合AV | 男人操女人视频免费_黄色免费大全_成人欧美在线视频_永久免费无码网站在线观看_一个人看的www网站_青娱乐这里只有精品_手机福利在线_最新中文字幕在线视频 | 在线毛片网_xxxx交换夫妇com1_亚洲一区中文日韩_a级一级毛片_最新免费av_91热热_久久成人精品视频_久久婷婷五月综合色国产免费观看 | 在线超碰人人_亚洲国产综合专区在线播放_日韩视频在线观看一区二区三区_亚洲a一区二区三区_男女上下猛烈啪啪免费看_免费国产a_日本十九禁免费观看视频_国产精品免费vv欧美成人a | 日韩中文字幕不卡高清an片_国产欧美日韩一区二区加勒比_成人福利免费观看_五月丁香六月综合缴情在线_尤物av无码色av无码_国产午夜无码视频在线观看_japanese中年熟妇_人妻出轨中文字幕不卡一区 | 91cn国产在线_久久官网_日本爱爱网_亚洲女人久久久_天天操天天摸天天射_91蜜臀精品国产自偷在线_久久中文av_欧美精品videofree | videos另类灌满极品另类_久久综合九色综合97伊人_天天看片夜夜爽_国产精品国产精品国产_福利片第一页_国产真实露脸乱子伦_久久精品人人_特级全黄男女交高清视频在线观看 | 国内精品影视无广告_激情国产一区二区_日韩一区二区免费在线观看_免费看的av网站_91久久色_国产综合不卡_www麻豆_日韩视频网站在线观看 | 色丁香色婷婷_老女人性生交大片免费_www.日本黄色片_一区日本_国内精品自国内精品66J影院_在线免费视频一区二区_美女扒开腿让男人桶爽网站_国产在线一二三四区 | 婷婷综合缴情亚洲狠狠小说_日韩三级一区二区三区_办公室强伦片免费看_国产亚洲精品自在久久蜜TV_男人又大又硬又粗视频_国产suv精品一区二人妻_亚洲aa视频_国产美女一区 | 人人干在线_www.欧美日本_第四色狠狠_亚洲美女视频在线观看_国产a一级毛片爽爽影院_欧洲激情网_99re免费视频_欧美特黄特色视频 | JLZZJLZZ全部女高潮_国产成人久久AV免费看_国产边打电话边被躁视频_欧美大黄大色一级毛片_韩国av网站在线观看_免费特级婬片日本高清视频_男人天堂2023_不卡精品 | 日本三集片_大地资源免费高清观看_中国高清av_精品无码黑人又粗又大又长_亚洲久久超碰无码色中文字幕_色拍综合_a一级免费视频_亚洲区小说区激情区图片区 | www.se婷婷_国产第3页_99精品国产福利在线观看免费_日本xxxxxxxxx_www久久综合_九九精品在线_日产精品最新在线_18勿入网站免费永久 | 色肉色伦交av色肉色伦_成人在线三级_超碰五月天_亚洲精品在线91_日产日韩亚洲欧美综合_西西4444WWW大胆无码_国产大BBWBBWHD视频_久艹精品 | 成人国产精品一级毛片视频毛片_爱看久久_丰满少妇夜夜爽爽高潮水网站_国产成人涩涩涩视频在线观看_国产妓女一级在线视频_亚洲国产极品_av片网址_亚洲少妇最新在线视频 | 136fldh导航福利微拍_不卡一区二区在线_一本色道综合久久亚洲精品_一区二区三区高清在线视频_我色综合_在线观看人成_国产精品国产三级国产普通话_青草久久久久 | cao人人_国产69精品久久久久孕妇黑_成人免费观看www的片_www.youjizz.com日本_亚洲AV成人一区二区三区天堂_办公室撕开奶罩揉吮奶头H文_欧美综合一区二区_欧美黄在线观看 | 久久午夜神器_理论片麻豆_国产成人精品日本亚洲一区_视频在线观看h_日本视频一区二区不卡_97人妻免费碰视频碰免_国产一级淫片一三区_韩国黄色一级毛片 | 国产一区在_国产真实乱免费高清视频_色香蕉久久_性欧美视频一区二区三区_亚洲资源av_又黄又爽又色视频_五十路熟女一区二区三区_午夜小视频免费 | 成·人免费午夜视频_久草热这里有精品6_一二三四在线社区观看社区7_人摸人人人澡人人超碰手机版_www..99热_欧美又粗又大BBBBXXXX_日日操夜夜操天天爽_欧美诱惑一区 | 国产精品综合不卡_亚洲最大成人在线视频_97caopor国产在线视频_91在线国产观看视频_最猛黑人熟妇性HDXXXX_大陆一级毛片免费看_99久久综合精品免费_欧美三级久久三级久久三级 亚洲av禁18成人毛片一级_三及片大全网日本_免费观看视频一区_欧美特黄视频在线观看_久久er热在这里只有精品66_在线观看高清不卡无码视频_国产九九热_一及毛片 | 国产麻豆一区二区三区在线观看_久久精品国产首页027007_亚洲国产精品自产在线播放_免费精品国偷自产在线青年_日韩无马砖区芒果_美女全黄视频_国产精品自在线_蜜臀久久99精品久久久久久 | www.97国产_在线成人毛片_欧美肥婆丰满bbw_18禁勿入午夜网站入口_欧美一级一区二区三区_wwwxx黄色_午夜精品免费看_岛国一区二区三区 | 亚洲一区二区精品在线观看_91精品国产综合久久小仙女图片_性欧美freexxxx_精品国产免费久久久久久尖叫_撕开奶罩揉吮奶头好爽_亚洲精品中文幕一区二区_成人wwxx免费观看_国产精品第页 | 国内精品久久无码人妻_久久国产精品大桥未久av_亚洲最大日韩中文字幕另类_91看片免费版_亚洲中文字幕久久精品无码va_操操操视频_五十高熟中文字幕_91一区二区三区四区 | 夜夜爱天天干_avtt亚洲_国产成人一级毛片_一个人免费观看www高清中文_av在线1_免费人成网站在线视频_唐人街探案网剧免费观看_超碰在线成人 | 日本成人激情_久久久免费精品视频_亚洲激情四射视频中文字幕久久_日本wwwwww_男女做爰裸体猛烈吃奶摸视频_日韩大片在线观看_麻豆视频成人_亚洲黄色一级大片 | 人禽猛交免费观看_日韩av在线免费播放_人人爽人人爽人人片AV东京热_欧美国产日产观看_av线网_中文一区二区三区四区_成人免费网站视频ww破解版_人妻巨大乳HD免费看 | 日日色av_欧美成年_voyeur精品偷窥_丝袜美腿一区二区三区_兔子先生高清在线观看_精品国产伦一区二区三区_无码精品AV久久久免费_精品久久人妻AV中文字幕 | 国产精品无毒不卡_欧美成人A片一区二区不卡_久草在线小说_午夜资源站_欧美大肥婆大肥BBBBB_99精视频_国产偷久久一级精品_兔子先生第三季免费视频播放 | 伊人aa_欧美精品偷拍_一级一级一片在线观看_99草视频_久久精精品久久久久噜噜_91精品国产高清久久久久久_内射白浆一区二区在线观看_亚洲国产一区二区精品视频 | 四色网站_久久久久人妻一区精品色_丁香婷婷综合在线麻豆_大屁股人妻女教师撅着屁股_精品丝袜国产自在线拍高清_99精品欧美一区_国产在线不卡2005_草草影院第一页 | 无码字幕av一区二区三区_草草视频免费_日韩黄色录相_国产女人高潮叫床视频_成人91免费_午夜亚洲理论片在线观看_国产精品99久久久久久一二区_小777国产主播 | 8x海外华人永久免费_国产一区二区三区av在线_色爱综合网欧美_在线看av网址_午夜嘿嘿_国产91精品入口_国产高清不卡一区二区三区_www.亚洲国产 | 精品久久久久久中文字幕2017_免费在线看黄色_91福利网站在线观看_日日爽天天_日韩一区精品_国产超碰人人爽人人做AV_色呦呦久久久_中日韩一级片 |