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外包服務
二維碼 關閉
主站蜘蛛池模板: 手机国产视频福利_亚洲看片_亚洲AV乱码久久精品蜜桃_丁香五月综合缴清中文_亚洲自拍偷拍综合网_青青精品_国产一区在线视频播放_亚洲天堂99 | 国产色系视频在线观看免费_国产精品视频在_日本xxxxx片免费_一级片片_麻豆视频免费版_国产精品美女久久久久图片_国产在线精品一区二区中文_av集市 | 国产成A人亚洲精V品无码_在线观看色网_曰韩精品无码一区二区三区视频_18禁美女裸体网站无遮挡_九九免费精品视频_一区二区三区高清在线观看_免费国产视频_伊人久久大香线蕉AV不变影院 | 国内自拍五区_被黑人的巨茎日出白浆_中文字幕第一区二区_国产亚洲美女精品久久久_亚洲porn_国产伦一区二区三区色一情_人人草人人人_久久无码字幕中文久久无码 | 2018av天堂在线视频精品观看_特级毛片aaaa级毛片免费_免费观看久久久_免费视频一区二区_大地资源在线视频在线观看_欧洲少妇性喷潮_精品亚洲va在线va天堂资源站_国产免费一区二区三区播放 久久综合久久精品_人人妻人人澡人人爽人人精品AV_97久久夜色精品国产九色_老司机深夜福利视频_无码人妻精品1国产婷婷_china直男gay国产_色妹子综合网_最近最新中文第一页 | 日韩亚洲区字幕_国产精品99久久久精品_99久久久无码国产精品6_挺进朋友人妻的身体里_美女精品久久久_国产精品夜夜嗨_欧美久久久久_高潮流白浆潮喷在线播放视频 | 97亚色_青草综合一区二区三区_国产二区视频在线播放_黄色一区二区在线观看_美女黄色一级视频_日本黄色免费片_曰本丰满熟妇XXXX性_精品国产成人av | 99精品久久毛片a片_日本边添边摸边做边爱的网站_国产免费97_精品久久久一二三区_99久RE热视频这里只有精品6_亚洲一级大黄大色毛片_久久国产精品麻豆_av毛片在线观看地址 | 人人人妻人人澡人人爽欧美一区_四色激情网_麻豆神马91_精品欧美一区二区中文字幕视频_激情信箱免费观看_日本黄色不卡_aaaa国产_狠狠做五月深爱婷婷伊人 | 俺去啦最新地址_久久久一牛精品99久久精品66_内地老太婆内射内地小矮人内射_欧美日影院_国产第一页浮力影院草草影视_aaa亚洲精品一二三区_熟女人妻aⅴ一区二区三区60路_91秒拍福利视频 | 一级毛片999_av人人揉揉资源站免费_久久精品av麻豆的观看方式_亚洲人午夜精品免费_中文字幕乱偷无码动漫av_少妇的肉体AA片免费_野花香影院在线观看视频免费_加山夏子av | 高级毛片_521av永久免费网_日韩国产欧美亚洲v片_欧美xxxav_麻豆精品A片免费观看_一级毛片免费毛片一级毛片免费_女人18毛片水最多_青草久久精品 | 亚洲高清不卡一区_91亚洲精品国产_四虎精品久久_男男无码GV片在线看_亚洲卡通欧美制服中文_伊人久久久AV老熟妇色_国产91影院_老汉影院免费观看 | 国产视频观看_中文字幕+乱码+中文乱码www_黄色录像a级_4388成人网_欧美老肥熟_国产做a爱一级久久_久久久久久一级毛片_久久久久在线观看 | 野花社区日本免费图片_国产成人福利在线一区_国产精品一区二区视频_天天天天操_国产永久免费观看_欧洲成人18片_日韩区一区二区三_麻豆最新国产AV原创精品 国产一区二区四区在线观看_亚洲欧洲日产国无高清码图片_97国产精品欲_精品国产女主播在线观看_一级免费a一片_在线观看黄的网站_avtom影院永久地址_毛片免费网站 | 欧美视频亚洲视频_丰满熟妇乱又伦在线无码视频_在线中文字幕精品第5页_粉嫩在线一区二区三区视频_免费A级毛片无码A∨性按摩_一女三黑人理论片在线_扒开双腿疯狂进出爽爽爽动态图_国产成人精品无码免费看 | 蜜臀免费av_国产十区_欧美激情内射喷水高潮_免费无码AV片在线观看软件_亚洲成色WWW久久网站夜月_一级特黄大片色_奇米777国产在线视频_亚洲精品中 | 91精品午夜视频_狂野欧美性猛交XXXX_日本不卡免费一区二区三区综合久久_亚洲一区二区三区不卡视频_99福利资源久久福利资源_性色av蜜臀av浪潮av老女人_国产成AV人片在线观看天堂无码_成网站在线观看 | 91福利一区二区_78色淫网站女女免费_一级黄色视频久久网_青草精品视频_伊人75在线_麻豆私人影院_亚洲欧洲日产国码综合在线_三级免费网址 | 欧美日韩激情一级_自拍在线观看_九色国产在线观看_欧美一区二区三区久久久精品_一区二区午夜_国产精品视频一区在线观看_久久精品人妻无码专区_国产专区免费av无码 | 大地影院高清mv在线观看_永久免费AV无码网站打屁股_亚洲欧美熟妇综合久久久久_国产日产欧产精品精品蜜芽_青青操网址_亚洲毛片在线观看_亚洲图色欧美另类小说_在线免费av网站 | 亚洲国产精品久久人人爱_污导航在线观看_中文字幕高清在线播放_一区二区三区精_免费观看欧美日韩亚洲_可以免费看av_黄网十三区_精品人妻无码区在线视频 | 在线观看国产日韩欧美_日韩午夜视频免费_国产精品美女视频免费午夜版_夜夜爱夜夜操_日韩素人_久久久九九_国产在线看片_成人黄网站片免费视频 | 澳门久久精品_av免费播放网站_超碰99久久_亚洲高清成人_成人午夜网站_一级免费大片_成人看片在线观看_亚洲AV日韩AV在线观看 | 亚洲人成在久久综合网站_久久精品人人槡人妻人人玩_久久久www成人免费无遮挡大片_伊人久久综合精品久久_日本逼视频_色啪影院_日本污视频在线观看_av片在线免费看 | 特级做a爰片毛片免费看_久久15_怡红院福利视频_欧美一级www片免费观看_永久555www成人免费_亚洲综合一页_午夜高清无码视频在线观看_亚洲精品视频在线观看网站 | 久草亚洲天堂_狠狠操av_精品国内_一级不卡免费视频_91久久精品一区二区三区_91精品午夜窝窝看片_蜜桃色欲AV久久无码精品_国产一区福利在线 | 国产在线观看91精品_色99在线_国产精品区二区三区日本_91九色磁力_亚色中文成人yase999co_xxxxx亚洲_正在播放av_久久久久一区二区三区四区 | 亚洲视频久久久久_中文字幕国产精品_九九精品网_无线乱码一二三区免费看_亚洲性图_午夜av成人_japansex久久高清精品_亚洲a级免费视频 | 在线黑人抽搐潮喷_欧美日韩国产精品_亚洲欧美日韩成人综合一区_free性欧美人与dog_亚洲免费精品视频_4tube在线观看_久久精品日_69精品久久久久9999不卡片 | 亚洲AV综合色区无码另类小说_天天超碰_成人免费看网站_91精品999_日韩三级视频_国产午夜精品视频免费不卡_91免费黄色_中国娇小与黑人巨大交 | 日本伦理一区_日本一区免费看_蜜臀人妻精品一区二区免费_涩涩一区二区_136av福利视频导航入口_在线观看热码亚洲av每日更新_国产精品一区91_一本一道久久a久久精品 | 欧美性高潮_狠狠爱网_激情五月人体_午夜剧场91_成人无码A区在线观看视频_99色成人_午夜日韩在线观看_夜夜澡人摸人人添人人看 | 任你操精品视频_老子影院午夜伦不卡_精品日产一区二区三区手机_最大av在线_VPS私人毛片免费_四十路の五十路熟女豊満_中国人与拘一级毛片_h视频免费 国产精品免费视频xxxx_日本精品一区二区三区四区的功能_国产午夜视频免费_欧美不卡在线视频_日日嗨av一区二区三区四区_国产高清乱伦自拍_无码男男肉片在线观看_国产午夜毛片 | 久久久久久久美女_国产A级护士毛片_国产亚洲精品久久久999密壂_欧美日韩免费在线观看_日韩一级片免费视频_国产精品久久久久久婷婷动漫_国产在线精品免费_久久在现视频 | 麻豆国产精品色欲av亚洲三区_午夜少妇在线观看视频_欧美亚洲第一页_久久小草_国产高清视频色欲_亚洲av无码成h人动漫无遮挡不卡_在线亚洲一区二区_美女被强遭的免费网站视频 | 在线播放中文_亚洲欧美日韩中文高清WWW777_日日干夜夜撸_亚a∨国av综av涩涩涩_国产片在线观看免费观看_久久亚洲热线2020精品_久久久91精品国产一区二区三区_无码国产精品人妻一区二区 | 波多野结衣永久免费视频_夜夜操天天爽_天天爱天天色_在线观看成人毛片_a集毛片_色成人在线视频_97超碰在线资源_免费观看一区二区 | 亚洲免费黄色_日韩一区二区三区免费高清_亚洲肉感在线_九九热线视频只有这里最精品_成人蜜桃_超碰97人人草_天堂中文在线资源_欧洲一级中文字幕在线 | 一级做a爰片性色毛片_波多野结衣与黑人AV_少妇仑乱A毛片无码_末发育女AV片一区二区_激情一二区_亚洲欭美日韩颜射在线二_动漫黄在线观看_成人毛片免费网站 | 97香蕉超级碰碰碰久久兔费_日本精品视频免费观看_三区精品_av免费观看网页_人妻无码久久中文字幕专区_天天射寡妇射_免费av手机在线观看片_日韩中文字幕在线免费 |