日本高清免费一本视频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,嘿嘿 結果第二篇就是我想要的文章了!!!
先把鏈接給大家吧: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综合亚洲色欲_交换娇妻呻吟hd中文字幕_东北老富婆高潮大叫对白_日日摸夜夜添夜夜躁好吊_97婷婷狠狠成为人免费视频_成人网站网址在线观看播放_波多野结衣av一本一道 国产毛片一线_亚洲性生活片_天天干干夜夜_超碰男人_妞干网国产_3D动漫同人精品无码专区_2021av视频_国产精品久久久久久久久久久痴汉 | 色欲视频综合免费天天_麻豆网站在线看_久久久久久久久久一区二区_91国内视频在线_欧美毛多水多肥妇_无码裸模视频在线观看_国产精品久人妻精品老妇_a级毛片免费 | 少妇9999九九九九在线观看_人妻丰满熟妇aⅴ无码_人成午夜免费视频在线观看_麻豆中文字幕在线观看_少妇人妻偷人精品一区二区_国产二二三区_99re在线视频观看_国产欧美一区二区三区免费看 | 麻豆传媒tv_小嫩模无套内谢第一次_人成精品_国产婷婷精品AV在线_亚洲熟妇av午夜无码不卡_国产一大二大不卡专区_明星一级毛片_人人看人人干 | 夜夜揉揉日日人人视频_秋霞成人午夜伦在线观看_jizz在线观看免费_91大神精品在线_国产精品精品国产_成年肉动漫在线观看无码中文_老熟女重囗味HDXX70星空_久久久久久久久影院 | 午夜精品久久久久久久99樱桃_日本一二三高清_国产一级视频免费观看_视频在线观看网站_国产超aⅤ男人的天堂_久久九九国产视频_免费视频福利_久久国产精品偷任你爽任你 | 久久xxx视频_国产寡妇乱子伦一区二区三区。_精品999www_二级黄色大片_久久毛片视频_靠逼国产_精品免费国产二区三区_伊人色播 | 精品成人_国产色婷婷久久99精品91_国产一级特黄毛片在线毛片_jizz日本亚洲少妇_日本中文字幕久久_视频免费观看大全_欧美国产乱视频_国产精品免费无遮挡无码永久视频 | 国语做受对白XXXXX在线_国产资源精品在线观看_日韩免费毛片_国产日韩欧美一区二区宅男_九九99精品_免费a级午夜绝情美女图片_日本欧美黄色大片_国产美女一级在线观看 | 成人黄色免费视频网站_网友自拍视频在线_日日操夜夜爽_成人动漫综合网_国产又粗又猛又爽又黄的视频软件_久草视频中文在线_中文字幕在线国产_欧美日韩国产一二 | 色欲蜜桃AV无码中文字幕_2018天天操天天干_青青草一区二区_豆花视频免费网站入口_aⅴ成年女人毛片免费观看_日本网站一区二区三区_久草久干_免费无码av片在线观看 | 久久亚洲日韩精品一区二区三区_亚欧成人永久免费视频_国产精品中文无码第一页av在线_亚洲国产无色码在线播放_日韩国产欧美精品在线_影音先锋男人在线资源资源网_苍井そら无码AV_欧美激情视频一区二区三区在线播放 | 国产美女一级二级三级chinese_无码毛片中文字幕加勒比免费高清_久久久久高清_97超碰资源站_日韩国产亚洲精品_掐住奶头用针扎进乳孔里小说_国产自产视频一区二区三区_毛片网此 | 一级黄色在线_屁屁影院ccyy备用地址_99青青草_91红桃视频_国产亚洲a∨片在线观看_国产成人AV大片大片在线播放_国产精品爽爽久久久久久蜜臀_国产一区二区福利在线 | 麻豆传媒视频在线免费观看_九色在线视频蝌蚪_亚洲色欲www综合网_欧美日韩视频在线观看一区_亚洲一线二线三线品牌精华液_日本中文字幕片_久久一道_色偷偷日本 | 四虎国产精品亚洲永久免费_日本真人做人爱一区二区三区_午夜片少妇无码区在线观看_99热久久精品免费精品_免费国产裸体美女视频全黄_素人一区二区三区_想看一级毛片_永久免费av无码网站yy | 青青草精品在线_成人91免费_狠狠久久亚洲欧美专_www中文字幕在线观看_99re在线播放_抽搐一进一出gif免费_野花社区影视在线www官网_日本丰满熟妇videossex8k | 日韩第一视频_香蕉影院在线_无套内射无矿码免费看黄_千金不装了短剧免费观看_九九久久国产_爆乳2把你榨干哦无码_三级小说一区_国产在线观看91一区二区三区 | 亚洲夜夜性无码_国产欧美日韩久久久久_亚洲无嘛_成人你懂的_久久视频在线_成人美女视频免费_国产精品老熟女露脸视频_精品亚洲成a人无码成a在线观看 | 亚洲二区不卡_一本大道久久东京热无码av_青青草草视频_av色综合网_毛片一区二区三区无码_亚洲中文字慕日产2021_亚洲精品国产精品乱码不99按摩_亚洲成Av人片在线观看不卡 | 国产精品不卡av在线观看_国产成人啪午夜精品网站_欧洲熟妇大荫蒂高潮a片视频_美女色又黄一级毛片_日韩二区三区_在线观看ww_中文无遮挡h肉视频在线观看_极品美女扒开粉嫩小泬18P | 青青精品视频_成人h版_x88av乱视频_精品香蕉一区二区三区_欧美视频日韩_人妻少妇精品无码专区二区_国产精品亚韩精品无码A在线_日本老妇xxxxx免费 | 欧美在线视频一区_日本精品一区二区三区在线播放_日本熟妇人妻xxxx_又色又爽美女网站_亚洲AV无码成人精品区一区_做暖暖小视频免费xo_军人野外吮她的花蒂无码视频_亚洲中文字幕无码人在线 | 好爽好紧好大的免费视频国产_亚洲欧美日韩久久一区二区_亚洲一级毛片免费看_国产午夜一级_成人3D动漫一区二区三区_成年免费视频播放网站推荐_FREE性欧美人与DOOG_国产成人精品免费久久久久 | 国产成人女人在线视频观看_免费xxxx大片国产片_少妇高潮久久久久久软件_亚洲影视在线观看_久久接色_日本精品99一区二区不卡_在线免费看黄色_亚洲国产精品高清久久久 | 国产奶水一区二区三区_pornhub欧美在线观看_日韩欧美国产1_亚洲大片免费观看_日本床戏视频_a国产精品_天天av天天翘天天综合网色鬼_日b视频在线观看 | 波萝蜜A毛黄AAA片_国产高清在线精品_久久久视频免费观看_欧美一区二区三区性视频_免费无码成人av在线播_91av国产在线_亚洲第一AAAAA片_米奇777在线观看 | 成人免费视频中文字幕_亚洲区在线播放_亚洲aⅴ精品_av成人免费看_欧美日韩国产精品_玩弄丰满奶水的女邻居_老司机精品在线_91视频网址入口 | 日韩成人高清_精品韩国三级在线观看视频_天堂中文在线资源_久久久久91_最近最新中文第一页_日本丰满大乳无码免费看_日本韩国视频在线观看_无码人妻久久一区二区三区 | 国产精品美女久久久久人_国内精品久久久久久久久久久_91久久免费_久久av免费看_丰满熟妇乱又伦精品_亚洲熟女久久色_日本成熟老妇乱_女女女n女女女n女hd | 国产亚洲欧美一区二区三区四区_99热综合_一区二区精彩视频_欧美一二三四五六七区_日韩免费视频在线观看_四虎一区二区_影音先锋黄色网址_成人hd | 性色av蜜臀av色欲av_脱了老师内裤猛烈进入的软件_中文亚洲AV片在线观看无码_a毛片视频_日韩视频在线观看一区二区三区_av大片在线无码免费_理论片91_99精品全国免费观看视频 | 成年人观看免费视频_国产精品免费不_伦理二区_国产中文在线播放_97人人干_裸体丰满少妇做爰视频_aⅴ色欲AV片无码精品小说_日本在线视频二区 | 三年片在线观看免费观看大全麻豆_免费啪啪片_中文字幕日韩人妻不卡一区_黄色一级免费网站_国产精品入口a级_日本乱淫一区二区三区_亚洲成A人片在线观看久_中文乱码人妻系列一区 | 国产成人精品免费视频大全五_日本爽快片100色毛片_国产成人综合久久精品免费_一级伦理毛片_欧美在线AAAAAAAAA视频_国产R级小视频在线观看_国产亚洲毛片_在线观看一级 | 青天衙门第一部40集_av免费一区_国产欧美做爰xxxⅹ在线观看_国产乱了伦视频大全亚琴影院_国产偷抇久久精品a片蜜臀a_国产精品久久久久久久久小说_国产高清中文手机在线观看_精品国产一区二区三区av片 | 亚洲精品偷拍影视在线观看_国一级片_91丁香亚洲综合社区_综合图区亚洲另类偷窥_精品国产一二三区_超碰tv_欧洲grand老妇人bbw_超碰在线人人 | 日本a级毛片免费视频不卡_精品久久久久久国产_久操国产在线_色综合网址_成人国产精品免费观看视频_欧美特级一级片_人妻少妇HEYZO无码专区_av天堂精品久久久久 | 欧美大码少妇_超碰一区二区_狠狠久久精品中文字幕无码_久久综合射_亚洲精品无码成人AAA片_色wwww全部免费_免费毛片一级_希岛爱理aⅴ在线中文字幕 | 毛片免费视频在线观看_日韩伦乱_97欧美精品系列一区二区_国产精品亲子乱子伦xxxx裸_操喷视频_欧美蜜桃视频_天上人间av网_亚洲日韩中文字幕日本 |