劉 燁
(黃岡職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,湖北黃岡438002)
IP數(shù)據(jù)報(bào)首部檢驗(yàn)和的生成與例證
劉 燁
(黃岡職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,湖北黃岡438002)
IP數(shù)據(jù)報(bào)在經(jīng)過路由器進(jìn)行轉(zhuǎn)發(fā)時(shí)一般要進(jìn)行三個(gè)方面的處理:首部檢驗(yàn)、路由選擇和數(shù)據(jù)分片。先前在講到IP數(shù)據(jù)報(bào)的首部檢驗(yàn)時(shí)都是一帶而過,筆者通過對(duì)IP數(shù)據(jù)報(bào)首部檢驗(yàn)機(jī)制的分析和研究,用案例剖析其原理,便于深入理解和掌握。
IP數(shù)據(jù)報(bào);首部檢驗(yàn)和;原理;例證
IP數(shù)據(jù)報(bào)在經(jīng)過路由器進(jìn)行轉(zhuǎn)發(fā)時(shí)一般要進(jìn)行三個(gè)方面的處理:首部檢驗(yàn)、路由選擇和數(shù)據(jù)分片。過去我們?cè)谥v到IP數(shù)據(jù)報(bào)的首部檢驗(yàn)時(shí)都是一帶而過,筆者通過對(duì)IP數(shù)據(jù)報(bào)首部檢驗(yàn)機(jī)制的分析和研究,用案例剖析其原理,便于深入理解和掌握。
IP數(shù)據(jù)報(bào)在傳輸過程中并不對(duì)其數(shù)據(jù)區(qū)進(jìn)行校驗(yàn),這樣做的原因有以下兩點(diǎn):
(1)lP協(xié)議是一個(gè)點(diǎn)對(duì)點(diǎn)協(xié)議,如果在傳輸過程中每個(gè)點(diǎn)都對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)操作,勢(shì)必增加很大的費(fèi)用,這與IP的“盡力傳輸”的思想不相符。
(2)將可靠性留給更高的層次去解決,這既可以保證數(shù)據(jù)的可靠性,又可以得到更大的靈活性和效率。因?yàn)镮P層的上層傳輸層是端到端的協(xié)議,進(jìn)行端到端的校驗(yàn)比進(jìn)行點(diǎn)對(duì)點(diǎn)的校驗(yàn)的開銷要小得多,在通信線路較好的情況下尤其如此。另外,上層協(xié)議可以根據(jù)對(duì)于數(shù)據(jù)可靠性的要求,選擇是否進(jìn)行校驗(yàn),甚至可以考慮采用不同的校驗(yàn)方法,這給系統(tǒng)帶來很大的靈活性。
那么IP協(xié)議為什么要提供對(duì)IP數(shù)據(jù)報(bào)首部的校驗(yàn)功能呢?一方面,IP首部屬于IP層協(xié)議的內(nèi)容,不可能由上層協(xié)議處理,另一方面,IP首部中的部分字段在點(diǎn)對(duì)點(diǎn)的傳遞過程中是不斷變化的,只能在每個(gè)中間點(diǎn)重新形成校驗(yàn)數(shù)據(jù),在相鄰點(diǎn)之間完成校驗(yàn)。
點(diǎn)到點(diǎn)和端到端的校驗(yàn)區(qū)間如下圖一。
圖一 點(diǎn)到點(diǎn)和端到端的校驗(yàn)區(qū)間
IP數(shù)據(jù)報(bào)的首部通過檢驗(yàn)和來保證其正確性。
發(fā)送方將IP數(shù)據(jù)報(bào)的首部按順序分為多個(gè)16比特的小數(shù)據(jù)塊,首部檢驗(yàn)和字段的初始值設(shè)置為0,用1的補(bǔ)碼算法對(duì)16比特的小數(shù)據(jù)塊進(jìn)行求和,最后再對(duì)結(jié)果求補(bǔ)碼,便得到了首部檢驗(yàn)和。
將經(jīng)過計(jì)算得到的首部檢驗(yàn)和填回到數(shù)據(jù)報(bào)的首部檢驗(yàn)和字段,封裝成幀后發(fā)給通往信宿的下一跳設(shè)備。
下一跳設(shè)備作為接收方將收到的IP數(shù)據(jù)報(bào)的首部再分為多個(gè)16比特的小數(shù)據(jù)塊,用1的補(bǔ)碼算法對(duì)16比特的小數(shù)據(jù)塊進(jìn)行求和,最后再對(duì)結(jié)果求補(bǔ)碼,若得到的結(jié)果為0,就驗(yàn)證了數(shù)據(jù)報(bào)首部的正確性。
發(fā)送方用1的補(bǔ)碼計(jì)算和數(shù)時(shí),首部檢驗(yàn)和字段被設(shè)置為O,等于沒有參加計(jì)算,求補(bǔ)碼后的檢驗(yàn)和與原檢驗(yàn)和各位正好相反。接收方用1的補(bǔ)碼計(jì)算和數(shù)時(shí),由于新的首部檢驗(yàn)和字段已經(jīng)被加入,在首部未發(fā)生變化的情況下所得的和數(shù)應(yīng)該為0xffff,因此,求補(bǔ)碼后的結(jié)果應(yīng)該為0x0000。
IP數(shù)據(jù)報(bào)首部檢驗(yàn)和的生成與校驗(yàn)過程如下圖二。
圖二 Ip數(shù)據(jù)報(bào)首部檢驗(yàn)和的生成與校驗(yàn)原理
下面通過一個(gè)具體的案例來剖析IP數(shù)據(jù)報(bào)的首部檢驗(yàn)原理。在本例中沒有IP選項(xiàng),所以首部長(zhǎng)度為5,數(shù)據(jù)總長(zhǎng)度為128字節(jié),數(shù)據(jù)報(bào)的標(biāo)識(shí)為1,未分片,TTL值為4,封裝的是TCP協(xié)議數(shù)據(jù),源地址和目的地址分別為:192.168.20.86和192.168.2l.20。
圖三給出了數(shù)據(jù)報(bào)首部檢驗(yàn)和的生成過程,計(jì)算中要注意加上進(jìn)位。生成的檢驗(yàn)和為3005。
圖三 生成檢驗(yàn)和
圖四給出了接收方對(duì)同一數(shù)據(jù)報(bào)首部進(jìn)行校驗(yàn)的過程。求補(bǔ)后得到的檢驗(yàn)和值為O,表明IP數(shù)據(jù)報(bào)首部在傳輸過程中沒有出現(xiàn)差錯(cuò)。
圖四 校驗(yàn)過程
如果接收該數(shù)據(jù)報(bào)的設(shè)備不是信宿,它就會(huì)將TTL值減1,然后判斷TTL是否超時(shí),若未超時(shí),則應(yīng)根據(jù)路由表尋找下一跳路由器,并判斷數(shù)據(jù)報(bào)是否需要分片以及是否分片。每次轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)時(shí),其TTL值都會(huì)發(fā)生變化,如果出現(xiàn)分片,數(shù)據(jù)報(bào)總長(zhǎng)度、標(biāo)志和片偏移等字段也會(huì)發(fā)生變化,因此,對(duì)新形成的數(shù)據(jù)報(bào)需要重新計(jì)算首部檢驗(yàn)和。然后向下一跳轉(zhuǎn)發(fā)。
[1]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)(第4版)[M].北京:電子工業(yè)出版社,2006:165-168.
[2]史創(chuàng)明,王立新.計(jì)算機(jī)網(wǎng)絡(luò)原理與實(shí)踐[M].北京:清華大學(xué)出版社,2006:165-168.
[3]姚永翹.網(wǎng)絡(luò)基礎(chǔ)與Internet應(yīng)用[M].北京:清華大學(xué)出版社,2006:104-108.
A
1672-1047(2010)06-0015-02
10.3969/j.issn.1672-1047.2010.06.04
2010-10-04
劉 燁,男,副教授。E-mail:liuye@hgpu.edu.cn.
[責(zé)任審校:金為民]