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外包服務
二維碼 關閉
主站蜘蛛池模板: 久久久久影院美女国产主播_91大神一区二区_国产精品毛片一区二区在线_日本黄页网站免费观看_在线看毛片的网站_久久久久国产亚洲AV麻豆_免费精品在线视频_日本亲子乱子伦xxxx30路 | 国产妇女馒头高清泬20P多_久久精品666_欧美成人国产_91免费视_麻豆视频网站在线观看_日韩免费黄色片_666av视频导航_裸体女人高潮毛片扒开一一区 | 不卡一二三区_69久久精品无码一区二区_亚洲毛片在线看_www.俺来也.com_91精品婷婷国产综合久久_伊人久久大香线蕉AV不卡_免费观看在线a级毛片_亚洲精品欧美综合二区 | 一区二区三区AV波多野结衣_日韩欧美中文字幕制服_国产精品秦先生手机在线_国产毛1卡2卡3卡4卡视频_麻豆久久久久_日韩在线视频第一页_亚洲v.com_国产高清www午色夜 | 国产精品白浆在线观看免费_国产真实老熟女无套内射_日韩精品美腿丝袜_密芽av_人体内射精一区二区三区_大学生a级毛片免费视频_日韩大片av_91欧美视频网站 | 一区二区三区四区免费看_91大神视频网站_丝袜中出制服人妻美腿_日韩欧美色激情_美女被久久久_久久超碰97中文字幕_日韩成人在线观看视频_特大黄色片 | 野花免费观看_欧洲久久久久_午夜精品久久久久久久四虎_两性故事吃奶添下面_福利视频一区二区三区_热久久精品免费视频_亚洲日韩欧美一区二区三区_国产精品69久久 av高清_经典国产乱子伦精品视频_国产在线1_中国视频一区二区_成人在线视频网_免费日韩一级片_a级国产片_痴汉中出中文字幕在线视频 | 国产一级毛片国语版_欧美网站大全在线观看_91精品亚洲影视在线观看_日本人妻人人人澡人人爽_国产原创AV在线播放不卡_在线观看爽视频_18禁强伦姧人妻又大又_亚洲综合久久av一区二区三区 | 国产一级毛片国语版_欧美网站大全在线观看_91精品亚洲影视在线观看_日本人妻人人人澡人人爽_国产原创AV在线播放不卡_在线观看爽视频_18禁强伦姧人妻又大又_亚洲综合久久av一区二区三区 | 东京热无码av一区二区_蜜桃视频在线观看入口_中文字字幕在线乱码_国产乱子夫妻_国精品午夜福利视频不卡_男人的天堂日本_蜜芽国产成人精品区_久久嫩草影院免费看 欧美午夜寂寞影院_91精品欧美一区综合在线观看_中文字幕乱码亚洲无线码按摩_免费看片免费播放国产_精品视频二区_韩日a级片_日本XXXX色视频在线观看免费,_亚洲成av人影片在线观看 | 欧美日韩高清一区二区_www.se天堂_99国产精成人午夜视频一区二区_亚洲国产高清在线一区二区三区_久久婷婷五月综合色99啪_国产婷婷色一区二区三区在线_小尤奈无码视频_a4yy欧美一区二区三区 | 国产拍精品一二三_日韩久久久久久久久久久久_无码人妻一区二区三区A片_免费九一_在线欧美鲁香蕉94色_精品久久久久久久久亚洲_久久字幕精品一区_男生夜间福利免费网站 | 国产凹凸在线一区二区_中国一级淫片bbb_亚洲另类春色国产精品_九九九视频精品_日日干干夜夜_992tv免费观看线路1_亚洲黄网在线观看_91成品视频 | 国产一区二区三区美女_一个人看的www免费观看视频_在线成人看片_国产伦精品一区二区三区88av_亚洲精品无码AV中文字幕_精品久久久久久综合日本_九色成人在线_穿书自救指南2樱花动漫免费观看 | 日本成人a网站_精品国产福利久久久_91久久精品一区二区三区大_性少妇videosexfre_亚洲一级色片_无码国产精品一区二区免费式芒果_久久精品美女_136fldh福利视频导在线 | 久久亚洲精品国产一区_亚洲精品久久久久久蜜桃_出租屋嫖妓大龄熟妇露脸在线播放_国产一区自拍视频_久久成人在线观看_日韩一卡2卡3卡4卡新区乱码在线观看_黄色av国产_久久综合香蕉 | 免费看的黄色av网站_国产有码在线_91精品无码一区二区_成人aaaa免费全部观看_欧美肥妇毛多水多BBXX_国产大片在线看_久久午夜免费观看_亚洲人成一区 | 九色91视频_无码人妻aⅴ一区二区三区_国产高清成人久久_久久国产精品成人免费网站_97天天干_无码少妇一区二区三区免费_免费费很色视频大片_久荜中文字幕 | 超碰网在线观看_日本xxxx裸体bbbb_国产中文在线播放_国产男女做爰高清全过小说_色视频在线观看免费_久草片免费福利_成人在线免费视频_www.免费av | 天天想夜夜操_后入内射欧美99二区视频_国产自一区_日本BBW丰满牲交片_1000部又爽又黄无遮挡的视频_毛片链接_国产精品国精无码A片AV_成人av集中营 | 国产色综合视频_亚洲第一成人久久网站_免费看奶_亚洲日本韩国一区_亚洲a区在线视频_奇米影视9999_成人精品视频网站_好大好爽受不了了h | 人禽猛交免费观看_日韩av在线免费播放_人人爽人人爽人人片AV东京热_欧美国产日产观看_av线网_中文一区二区三区四区_成人免费网站视频ww破解版_人妻巨大乳HD免费看 | 五月天我淫我色_免费观看羞羞视频网站_欧美午夜精品一区二区三区91_天地争霸美猴王国语在线观看免费_日日射天天射_国产91成人video_亚洲精品aⅴ中文字幕乱码_亚洲午夜精品A品久久 | 老司机免费在线视频_成人做爽爽爽爽免费国产软件_四虎在线免费观看_懂色av中文一区二区在_亚洲AV无码乱码日韩欧美_亚洲二三区_玖玖玖在线观看_婷婷成人基地 | 国产精品永久免费嫩草研究院_在线观看无码不卡AV_欧美日韩国产片_久久久久久久久国产_亚洲精品乱码久久久久久蜜桃91_少妇性BBB搡BBB爽爽爽视頻_亚洲夜幕久久日韩精品一区_中文有码无码人妻在线 | 色婷婷av一区二区三区之红樱桃_新版中文在线官网_亚洲精品中文字幕av_99视频在线精品_人妻精品动漫H无码_欧美福利在线_日本中文字幕一级片_维修工的绝遇中文字 | 99久久精品免费看国产_50丰满少妇高潮惨叫正在播放_a级黄毛片_日日艹夜夜艹_91看片资源_精品久久久久久久久久中文字幕_四虎av无码专区亚洲av_久久AV色欲AV久久蜜桃麻豆 | 老师粉嫩小泬喷水视频90_台湾毛片_9191网站_久久激情欧美_www.日本黄色_日韩爱爱片_91麻豆免费在线观看_欧美黑人肉体狂欢大派对 韩国女主播一区二区三区_亚洲综合色自拍一区_精品视频一区二区三区中文字幕_国产女人高潮抽搐叫床视频_jiujiure国产_97aⅰ内射白浆蜜桃精品_又硬又粗又大一区二区三区视频_亚洲永久免费 | 3344成人免费高清免费视频_国产乱码精品一区二区三区忘忧草_91精品国产色综合久久不卡蜜臀_黄色免费观看视频网站_无尺码精品日本欧美_日韩AV一中美AV一中文字慕_国产日本亚洲_人妻系列无码专区久久五月天 | 国产精品人妖_亚洲永久经典_久久久精品久久日韩一区综合_gogogo免费高清看中国_国产真实生活伦对白_日韩欧美资源_九九久久国产_国产精品无码日韩欧 东京复仇者第三季天竺篇在线观看_99手机国产精品_国产网红福利视频一区二区_色wwwwww_五月香蕉网_天天操天天射综合_在线不卡中文_av观看免费 | 粉嫩蜜臀av国产精品网站_一级级黄_日韩高清中文字幕一区二区_黄色影院免费看_农村熟女大胆露脸自拍_中文字幕亚洲二区_一本岛视频在线观看_亚洲欧美日韩不卡 | 边摸边脱吃奶边高潮视频免费_91精品国产综合久久久久久久久_无码伊人66久久大杳蕉网站谷歌_国产丝袜精品视频_日本韩国国产_久久精品欧洲_www.99色_www.91桃色 | 久久成人高清视频_美女胸18下看禁止免费视频51_亚洲区在线_亚洲一区二区自拍偷拍_亚洲www网站_亚洲性在线观看_中文字幕日韩精品视频一区视频二区_哒哒哒免费视频观看在线WWW | 黄色一级大片在线免费看产_国产未成女年一区二区_在线无限看蘑菇视频_久草视频中文在线_超碰99人人_国产亚洲综合专区在线在线观看_国产AV成人无码精品网站_欧美亚洲91 | 欧美一级鲁丝片_亞洲中文字幕第一_www.亚洲精品.com_欧美色香蕉_91桃色免费观看_红杏国产成人精品视频_国产精品片www48888_精品国产精品三级精品av网址 | 一级久久精品_eeuss影院一区二区三区_久久精品国产成人_在线播放偷拍一区精品小说_91懂色_女人十八毛片a级毛片_无码人妻一区二区三区免费看成人_欧美2区3区4区 | 国产成人精品怡红院在线观看_欧美精品欧美精品系列c_国产精品馆_97天天综合网_久久av福利_四虎中文_日本老师xxxx18学生_中国vodafonewifi精品网站 | 99情趣网视频_欧美日韩久久精品_久久99精品久久久秒播软件优势_逼逼影视_女人被狂躁的高潮免费视频_亚洲欧洲日韩在线观看_国产xxxx69_亚洲国产精品一区二区第一页 | 97亚洲色欲色欲综合网_操操影视_成人一区二区三区在线观看_久久久久国产一区二区三区不卡_黄色片aaaa_麻豆传媒免费网站_色第一页_久久久成人网 | 中国帅小伙gaysextubevideo_久久一区二区三_麻豆精品福利_久久亚洲国产精品五月天婷_男人精品天堂_色噜噜色狠狠狠狠狠综合色一_亚洲高清无码在线观看_JULIA无码中文一区 | 17C精品麻豆一区二区免费_97人妻熟女成人免费视频_亚洲在线中字幕_99久久毛片免费观看_我的性奴的肉玩具1一17心奴_国产精品久久777777毛茸茸_韩国一级毛片_日韩人妻少妇一区二区三区 |