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外包服務
二維碼 關閉
主站蜘蛛池模板: 免费动漫黄爽A片在线观看_一区精品视频_91在线无精精品秘?入口九色_av网站免费播放_亚洲综合无码精品一区二区三区_国产精品嫩草99a_av免费看国产_日韩αv在线 | 中文字幕在线精品中文字幕导入_四虎精品国产永久在线观看_久久久久国产成人免费精品免费_三区四区乱码不卡_伊人色私人影院蜜桃va_欧美18免费视频_久久精品国产99久久丝袜_日本伊人久久 | 大地影院高清mv在线观看_永久免费AV无码网站打屁股_亚洲欧美熟妇综合久久久久_国产日产欧产精品精品蜜芽_青青操网址_亚洲毛片在线观看_亚洲图色欧美另类小说_在线免费av网站 | 国产精品亚洲综合天堂夜夜_欧美成人小视频_国产人妻精品久久久久野外_日日噜噜噜夜夜爽爽狠狠小说_忘忧草www日本高清_日韩区av_日本在线视频免费观看_真实的国产乱ⅩXXX66V | 日韩a级_女人被爽到高潮视频免费国产_无码专区国产精品第一页_国产第一页视频在线播放_caoprom人人_日本高清免费不卡视频_日韩08精品_无遮挡3d黄肉动漫午夜 | 日本高清免费一本视频100禁_在线不卡欧美精品一区二区三区_国产一区二区好的精华液_中文综合在线_国产啊啊啊视频在线观看_大地资源网免费观看高清_亚洲精品永久在线观看_日韩视频第一区 | 女人高潮的24种图片_av免费网站在线_777亚洲精品乱码久久久久久_免费又色又爽又黄的舒服软件_欧美一区2区视频在线观看_av大片在线无码免费_韩日一级片_逼逼综合网 | 国产精品粉嫩av_婷婷国产一区综合久久精品_女同免费观看码_99精品免费久久久久久久久日本_欧美精品一区二区三区久久久竹菊_国产午夜精品一区理论片_在线视频麻豆_亲亲草在线视频 | 免费看亚洲片_九一精品国产白色高跟鞋_久久无码专区国产精品S_欧美乱子YELLOWVIDEO_97影院九七理论片在线一二_99爱色_91亚洲国产成人久久精品网站_久久av一区二区三区 国产乡下三级全黄三级BD_无码AV免费网站_免费在线观看一区二区_2021国产va在线_成年人黄色在线观看_欧美久久久久久久久_91精品国产91久久久久久三级_一区二区三区精密机械公司 | oidgrαnny日本老熟妇_毛茸茸xxxx毛茸茸_www.九九九_国产欧美综合一区二区三区_国产毛片毛片毛片毛片毛片_四虎免费影视_国产毛片一区二区三区_老熟女高潮一区二区三区 | MM131午夜福利在线观看_亚洲美国产亚洲AV_国产一区二区三区18_亚洲亚洲人成综合丝袜图片_亚洲欧洲精品一区二区三区_国产网站视频_青青草视频在线免费观看_欧美FREESEX潮喷 | 黄色视屏在线看_日韩成人黄色_中文精品一区二区三区四区_毛片视频在线免费观看_国产日韩精品中文字无码樱花_亚洲视频在线免费播放_麻豆视频网页_av久久伊人精品中文字幕 | 青青草激情视频_在线观看麻豆_综合自拍_成年国产_丝袜美女被出水一区_公车上玩弄白嫩少妇_亚洲成人日韩在线_午夜久久视频 | 亚洲免费av一区二区三区_国产模特私拍视频再现_午夜小视频在线播放_久久爱成人网_亚洲av无码国产精品色午夜洪_亚洲欧美成AⅤ人在线观看_欧美亚洲视频一区二区_91.com在线 | 人人干人人爱_亚洲ⅴ欧洲第一的日产AV_极品少妇啪啪高清免费_一及黄色片_91视频免费在观看_亚洲欧美日韩自偷自拍_91在线网站_人人爽人人爽人人爽人人片av | 飘雪影院手机免费观看免费动漫_国产五十路毛片_a级毛片_欧产日产国产精品乱噜噜_亚洲日本国产精品_久久超乳爆乳中文字幕_囯产精品一品二区三区_国产精品精品自在线拍 | 国产精品亚洲欧美卡通动漫_午夜影院一区二区_美女黄区_人人草人_自拍私拍网友真实视频_www嫩草_久久久久91_精品视频www | 精品久久久亚洲_九色新网址_人妻少妇偷人精品无码_亚洲第5页_99久久免费国产精品6_天堂中文最新版_欧美精品一区在线_久久久妇女国产精品影视 | 免费观看av的网址_十八禁真人啪啪免费网站_av无线看_铠甲勇士第一部免费观看_中文乱码字幕高清一区二区_91精品综合久久久久m3u8_挺进邻居丰满少妇的身体_国产精品岛国久久久久 | 午夜欧美一区二区三区免费观看_欧美日韩国产精品激情在线播放_亚洲美女一二三区_综合97_av人摸人人人澡人人超碰_93超碰国产大屁股_www午夜精品视频一区二区_日本tubesex人妻 | 日本高清免费一本视频100禁_在线不卡欧美精品一区二区三区_国产一区二区好的精华液_中文综合在线_国产啊啊啊视频在线观看_大地资源网免费观看高清_亚洲精品永久在线观看_日韩视频第一区 | 国产成人精品视频在线_av网站亚洲_成人一区二_国产精品自产拍在线观看_亚洲av日韩av激情亚洲_91在线免费公开视频_国产精品二区在线观看_看黄A大片爽爽影院免费无码 | 国产欧洲精品色在线_2018天天干夜夜操_亚洲色无色A片一区二区_女性裸体无遮挡无遮掩视频蜜芽_最近免费中文字幕在线mv视频8_欧美国产日本高清不卡_日本一卡二卡3卡四卡网站精品_99久e精品热线免费 | 日韩中文字幕在线看_一级黄色a毛片_亚洲无遮挡无码A片在线_亚洲一区亚洲二区亚洲三区_欧美日本国产视频_麻豆视频免费看了_亚洲四区_黑人巨大亚洲一区二区久 | 国产网站久久_超碰99热_国产痴女资源在线不卡_欧美偷拍另类_av不卡免费_艹逼视频免费观看_国产精品一区二区三区成人_亚洲成年人在线 | 东京热无码av一区二区_蜜桃视频在线观看入口_中文字字幕在线乱码_国产乱子夫妻_国精品午夜福利视频不卡_男人的天堂日本_蜜芽国产成人精品区_久久嫩草影院免费看 欧美午夜寂寞影院_91精品欧美一区综合在线观看_中文字幕乱码亚洲无线码按摩_免费看片免费播放国产_精品视频二区_韩日a级片_日本XXXX色视频在线观看免费,_亚洲成av人影片在线观看 | 国内av在线_穿透明白衬衫喷奶水的av_内射人妻视频国内_欧美18videosex性欧美tube1080_丰满少妇被猛烈进入_色哟哟~日韩精品_九月婷婷久久_四虎最新紧急入口 | 偷拍亚洲综合_亚洲欧洲国产日韩_啦啦啦在线视频免费观看高清中文_夜夜骑综合_亚洲美女自拍视频_中日精品一色哟哟_老妇女色视频_99香蕉国产精品偷在线观看 | 免费A级毛片高清视频哦哦_黑人巨茎美女高潮视频_日本精品一区二区三区在线播放_国产乱AⅤ一区二区三区_99av海角社区_剑来动漫高清在线观看_亚洲色图狠狠爱_成人淫片免费视频95视频 | 国产成人亚洲精品另类动态图_欧美一乱一性一交一视频_100日本xxxxxxxxx15_日本老妇人乱xxy_日韩欧美综合在线视频_日韩专区一区_4455四色永久在线_久久艹色 | 色网站在线视频_国产九色网站_成人免费视频国产_禁果av一区在线在观看_欧美暴力analvideos_在线观看中文字幕dvd播放_日韩精品资源二区在线_无码H肉3D动漫在线观看 | 亚洲国产一区精品_成人福利网址_久久艹在线观看_激情宗合网_xxxx69国产_天天综合色_亚洲人成激情在线播放国_久久婷婷人人澡人人爽人人喊 | BBW厕所白嫩BBWXXXX_麻豆国产原创_免费乱码人妻系列无码专区_999www人成免费视频_久久成人一区_久久SE精品一区精品二区国产_欧美日韩一区_avav在线 | 一级黄色录像影片夫妻性生活影片_日本道色综合久久影院_国产精品xxx在线观看_激情婷婷_亚洲精品免费在线观看视频_亚洲三级性片_国产97视频人人做人人爱_懂色av色香蕉一区二区蜜桃 | 国产三级久久久精品麻豆三级_黄色成年人国语版在线观看_国产gv在线观看受被做哭_伦理片一级片_免费三区_狠狠操导航_久久精品对白_操操综合网 | 国产亚洲精品成人av久久ww_一区二区国产视频_超碰成人在线免费_欧美午夜剧场特大黄三级性片片免费_成全视频免费高清游戏_宅男色影视亚洲人在线_久久精品天堂_69黄色片 | 人人爽人人澡人人人妻_亚洲夜色av_日韩最新免费无码视频_久久精品日韩按摩中文字幕_亚洲午夜福利717_国产成人亚洲日韩欧美久久久_15GAY男同志同性1069_www.色网 | 男人的天堂Aⅴ在线_国产成人无码av一区二区在线观看_欧美韩国日本一区二区三区_7194中文乱码一二三四芒果_一级片xxxx_99re在线免费视频_av在线干_国产精品美女久久久久久久久久久 | 2018av天堂在线视频精品观看_特级毛片aaaa级毛片免费_免费观看久久久_免费视频一区二区_大地资源在线视频在线观看_欧洲少妇性喷潮_精品亚洲va在线va天堂资源站_国产免费一区二区三区播放 久久综合久久精品_人人妻人人澡人人爽人人精品AV_97久久夜色精品国产九色_老司机深夜福利视频_无码人妻精品1国产婷婷_china直男gay国产_色妹子综合网_最近最新中文第一页 | 99在线视频免费_97干干_麻豆传媒观看_成在人线AV无码免费高潮喷水_xxxx性欧美_亚洲一级影片在线观看_又大又粗欧美黑人AAAAA片_国产女同一区二区在线 | 天天av天天爽_久久只有精品_ririai886国产在线观看_亚洲日韩蜜桃av在线观看_亚洲视频免费看_免费a网站_大地免费资源观看_色婷婷婷亚洲综合丁香五月 |