日本高清免费一本视频100禁_在线不卡欧美精品一区二区三区_国产一区二区好的精华液_中文综合在线_国产啊啊啊视频在线观看_大地资源网免费观看高清

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,嘿嘿 結果第二篇就是我想要的文章了?。。?br /> 先把鏈接給大家吧: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免费网站_男人戳女人戳到爽视频_在线中文字幕精品第5页_国产一级在线观看视频_成人一级_成年人免费在线看惊悚片动作片_色欲色av免费观看 | 国产a区_99精品欧美一区二区三区_在线观看一区不卡_国产成人片无码视频在线观看_亚洲精品乱码久久观看网_国产精品久久这里只有精品_先锋中文字幕在线资源_久草在线中文888 | 久久第四色_色啪影院_国产免费啪视频观看网站_裸体按摩xxxxx高清_国产制服丝袜免费视频_日韩av永久免费网站_色偷偷偷亚洲综合网另类_精品免费一区二区三区 | 欧美日韩一区在线播放_亚洲高清人人爽夜夜爽AV毛片_亚洲成在人线aⅴ免费毛片_亚洲区一区二区_欧美破苞系列二十三_国产初高中生视频在线观看_午夜性又黄又爽免费看尤物_国产精品亚洲第一区在线暖暖韩国 | 美女高潮久久久_久久久99999_91多人xxx少妇_亚洲精品午睡沙发系列_两个人免费高清视频WWW_国产成人免费视频网站高清观看视频_丝袜一区二区三区_国产成年无码AV新网站 | 国内一区二区三区在线观看_亚洲中文字幕av无码专区_久久中文字幕无码A片不卡男同_18成禁人视频免费网站_亚洲欧洲精品专线_精品亚洲国产专区在线观看_欧美疯狂xxxxbbbb牲交_伊人色综合一区二区三区 | 国产一区免费播放_亚洲精品天堂久久久老牛_女人被做到高潮视频_国产超碰久久av青草_丁香色狠狠色综合久久_日本高清网色_手机在线看黄色片_欧美精品色一区二区三区 | 国产午夜不卡片免费视频_97国产精品人妻无码免费_国产一卡2卡3卡4卡网站免费_97se亚洲综合在线_日韩AV一区二区三区免费看_96精品_香蕉伊蕉伊中文视频在线_九一毛片 | 国产乱子伦精品免费女_AV人摸人人人澡人人超碰妓女_亚洲高清中文字幕免费_我爱我爱色成人网_亚洲一区不卡在线_夜夜未满十八勿进的爽爽影院_J97久久国产亚洲精品超碰热_日本高清久久久 | 无码av亚洲一区二区毛片_久久综合一区二区_亚洲天堂视频网_成人国产一区二区9166_精品视频一区二区三区在线播放_欧美成人免费观看_人人妻久久人人澡人人爽人人精品_国产成人精品a∨一区二区 | 亚洲夜夜性无码_国产欧美日韩久久久久_亚洲无嘛_成人你懂的_久久视频在线_成人美女视频免费_国产精品老熟女露脸视频_精品亚洲成a人无码成a在线观看 | 久久99精品久久久久久秒播放器_福利社区一区二区_国产精品一区二区av交换_成年人免费视频_欧美日韩亚洲在线_jj男色网_热re99久久精品国产99热_国产欧美另类久久久精品 | 德国妓女精品性HD_狼人精品一区二区三区在线_性猛交xxxx乱大交中国_国产一级片中文字幕_四虎永久在线精品免费播放_日日婷婷夜日日天干A片_91成熟丰满女人少妇777_好好热av | 精品久久久久久久久久中出_成人免费在线网址_正在播放重口老熟女露脸_精品国产成人av_欧美在线亚洲_激情毛片无码专区_亚洲超高清大胆极品人体美女_欧美日韩高清 男人的天堂Aⅴ在线_特级毛片A片全部免费97_97免费看_免费无码一区二区三区A片百度_精品成人网_狠狠噜天天噜日日噜视频跳一跳_中国熟妇人妻videos_日日碰日日摸夜夜爽无码 | 国产a区_99精品欧美一区二区三区_在线观看一区不卡_国产成人片无码视频在线观看_亚洲精品乱码久久观看网_国产精品久久这里只有精品_先锋中文字幕在线资源_久草在线中文888 | 一级视频毛片_成人观看免费视频_97影院九七理论片在线一二_免费av一区二区三区_午夜A级成人免费毛片_一级高清免费毛片_狠狠五月激情六月丁香_久久99精品这里精品6 | 一区动漫_国产91在线高潮白浆在线观看_72成人网_国产一女三男实拍视频_欧美最猛性xxxx_aaaaa一级片_国产高清一国产aV麻豆网_黄频网址 | 中文字幕日日_无码国产精品一区二区免费式芒果_免费日韩精品_caoporn免费在线视频_最近2019中文免费高清视频观看www99_欧美超逼视频_国产成人激情_dvd女人裸体 | 不卡欧美_国产精品99久久久精品_二级片免费_亚洲激情一二三区_粗大猛烈进出高潮视频免费看_国产免费一级一级_国产视频一区精品_欧美日本另类 | 凹凸视频国产福利永久_91华人在线_亚洲免费av网站_av白浆_亚洲制服无码一区二区三区_91精产品一区一区三区_国产免费人视频在线观看免费_国产亚洲欧美日韩在线观看一区二区 | 成人黄色小说视频_国产CHINESEHDXXXX美女_欧美日一区二区_麻豆短视频免费_国产精品x453.com_国产乱子伦在线观看免费_少妇激烈床戏视频_一区二区欧美在线观看 | 日韩中文字幕第5页在线_柠檬av导航_无码中文精品专区一区二区_狠狠色丁香久久婷婷综合_中_国产成人永久免费公开视频_国产精品二区不卡_制服亚洲日韩丝袜欧美_秀人顶级模特尤妮丝的最新视频 | 日本舌吻交缠舌头视频网站_国产黄免费_国产农村妇女三级全黄91_欧美级特黄AAAAAA片_av一级久久_国产呦在线沙发_尤物一区_欧美视频一区 99久久精品国语对白_国产小u女在线未发育_runaway动漫免费官网_国产精品一区二区久久久久_日韩国产高清视频_91操bb_亚洲一区二区三区影院_国产在线精品无码AV不卡顿 | 亚洲自拍偷拍一区_a4yy午夜_久久久久九九九九_国产超碰av_777久久精品一区二区三区无码_黑人粗硬进入过程视频_av在线收看_中国高清av | 黄色大片网站在线观看_亚洲成亚洲乱码一二三四区软件_100日本xxxxxxxxx15_99激情视频_91精产国品_91视频免费看_九七伦理97伦理手机_国产高清免费视频 | 三年片在线观看免费观看大全麻豆_免费啪啪片_中文字幕日韩人妻不卡一区_黄色一级免费网站_国产精品入口a级_日本乱淫一区二区三区_亚洲成A人片在线观看久_中文乱码人妻系列一区 | 国产AV仑乱内谢_国产精品一区二区三区在线免费观看_久久精品天天中文字幕人妻_成人毛片18女人_四虎影院最新网址_欧美成人精品一区二区综合_国语免费一级毛片私人_亚洲国产成人精品女人久久 | 欧美精品欧美精品系列c_国产a一级毛片_少妇人妻系列无码专视频区_韩日av网站_色婷婷久久久久swag精品_JULIA无码中文字幕一区_日日骚视频_能在线看的av | 成人免费A级毛片天天看_av在线免费播放网站_美女wwwzzz色_精品一区二区三区免费毛片爱_精品一区二区三区入口_成年片黄色日本大片网站视频_国产在线无码精品无码_国产日韩欧美东南在线 | 999精品在线观看_97午夜理论片影院在线播放_亚洲精品美女久久17c_亚洲丝袜制服美女av_中文乱码字幕高清一区二区_国精一区二区三区_久久精品视频网址_日韩AV无码久久精品免费 | 久久免费资源_gratisvideos另类灌满_97偷自拍亚洲综合二区_国产女人啪啪_在线免费看a_日本公妇被公侵犯中文字幕2_精品自拍农村熟女少妇图片_中文字幕乱偷无码动漫av | 伊人视频在线观看_国产麻豆tv最新在线_久久伊人影院_在线免费观看麻豆_久久嫩草影院免费看_欧美精品一区免费_色姑娘综合网_精品一区国产VR | 国产19页_亚洲日韩精品欧美一区二区_日本中文字幕视频在线观看_国产在线看片_中文字幕AⅤ在线视频_亚洲鲁丝片一区二区三区_亚洲1区_亚洲午夜一区 | 极品少妇啪啪高清免费_噼里啪啦免费观看高清动漫_欧美人与动牲交ZOZO_亚洲欧美综合_亚洲天天在线_97久久超碰国产精品_特一级一性一交一视一频_久热久草在线 | 国产三级精品三级在线专区1_婷婷伊人网_久久av福利_午夜天堂视频_亚洲国产三级在线观看_伊人成人影视_超碰在线免费97_97视频在线观看播放 | 久久久亚洲欧洲日产国码二区_在线看片无码永久免费aⅴ_一级草逼片_91精品播放_毛片视频在线免费观看_91伊人影院_成人免费色_av色久 | 国产一在线精品一区在线观看_岛国av大片_日日爽夜夜操_久久艹天天艹_噜噜高清欧美内射短视频_妺七AV导航福利_国产高清不产二区三区_久草在线视频在线 | 亚洲福利视频网址_一级做a爰片久久毛片免费看_成人aaaa免费全部观看_18禁无码永久免费无限制网站_久久AV无码专区亚洲AV桃花岛_国产50部艳色禁片无码_日本不卡一_777亚洲精品乱码久久久久久 | 亚洲jizzjizz妇女_性色AV无码中文AV有码VR_色夜av_久久久www免费人成黑人精品_亚洲线精品一区二区三区四区_四虎影视久久久免费观看_99久久精品免费看国产一区二区三区_日本国产一区二区三区 | 欧美性战a久久久久久_欧美性爱一区三区_大地免费资源观看_精品1区2区3区4区_国产在线榴莲视频导航_97久久精品人人槡人妻人人玩_一级红色毛片_国产AV无码专区亚洲版 | free国产毛片一区二区_97天天综合网_又污又黄无遮掩的网站_久久精品AV无码夜色_激情男女高潮射精AV免费_嫩草视频网站_久久精品亚洲一区二区三区观看模式_免费a级黄色毛片 |