MTU MSS(TCP) IP分片技術(shù)概述協(xié)議 2009-06-11 14:00:42 閱讀451 評(píng)論0 字號(hào):大中小 訂閱 在應(yīng)用程序中,必須關(guān)心IP數(shù)據(jù)的長(zhǎng)度。如果它超過網(wǎng)絡(luò)的MTU,那么就要對(duì)IP數(shù)據(jù)報(bào)進(jìn)行分片。如果需要,源目的端之間的每個(gè)網(wǎng)絡(luò)都要進(jìn)行分片,并不只是發(fā)送端主機(jī)連接第一個(gè)網(wǎng)絡(luò)才這樣做。在此文中,將討論IP分片的一些原理及其在分片中所需要的幾個(gè)元素(此文只討論MTU最大傳輸單位和MSS最大數(shù)據(jù)分段),本文對(duì)以太網(wǎng)的例子作了初略的分解。
關(guān)鍵字:IP分片,MTU,MSS
引言
分片是分組交換的思想體現(xiàn),也是IP 協(xié)議解決的兩個(gè)主 要問題之一。在IP 協(xié)議中的分片算法主要解決異種網(wǎng)最大 傳輸單元(MTU) 的不同.但是分組在傳輸過程中不斷地分片和重組會(huì)帶來(lái)很大的工作量還會(huì)增加一些不安全的因素。
正文: 一、什么是IP分片 IP分片是網(wǎng)絡(luò)上傳輸IP報(bào)文的一種技術(shù)手段。IP協(xié)議在傳輸數(shù)據(jù)包時(shí),將數(shù)據(jù)報(bào)文分為若干分片進(jìn)行傳輸,并在目標(biāo)系統(tǒng)中進(jìn)行重組。這一過程稱為分片( fragmentation)。 二、為什么要進(jìn)行IP分片 通常要傳輸?shù)?span>IP報(bào)文的大小超過最大傳輸單位MTU(Maximum Transmission Unit)時(shí)就會(huì)產(chǎn)生IP分片情況。IP分片通常發(fā)生在網(wǎng)絡(luò)環(huán)境中。比如說,在以太網(wǎng)(Ethernet)環(huán)境中可傳輸最大IP報(bào)文大?。?span>MTU)為1500字節(jié)。而傳輸?shù)膱?bào)文大小要比1500字節(jié)大,這個(gè)時(shí)候就需要利用到分片技術(shù),經(jīng)分片后才能傳輸此報(bào)文。另外,使用UDP很容易導(dǎo)致IP分片,而很難強(qiáng)迫TCP發(fā)送一個(gè)需要進(jìn)行分片的報(bào)文。
三、IP分片原理及分析 分片和重新組裝的過程對(duì)傳輸層是透明的,其原因是當(dāng)IP數(shù)據(jù)報(bào)進(jìn)行分片之后,只有當(dāng)它到達(dá)下一站時(shí),才可進(jìn)行重新組裝,且它是由目的端的IP層來(lái)完成的。分片之后的數(shù)據(jù)報(bào)根據(jù)需要也可以再次進(jìn)行分片。 IP分片和完整IP報(bào)文差不多擁有相同的IP頭,ID域?qū)τ诿總€(gè)分片都是一致的,這樣才能在重新組裝的時(shí)候識(shí)別出來(lái)自同一個(gè)IP報(bào)文的分片。在IP頭里面,16位識(shí)別號(hào)唯一記錄了一個(gè)IP包的ID,具有同一個(gè)ID的IP分片將會(huì)重新組裝;而13位片偏移則記錄了某IP片相對(duì)整個(gè)包的位置;而這兩個(gè)表中間的3位標(biāo)志則標(biāo)志著該分片后面是否還有新的分片。這三個(gè)標(biāo)志就組成了IP分片的所有信息,接受方就可以利用這些信息對(duì)IP數(shù)據(jù)進(jìn)行重新組織。 1、標(biāo)志字段的作用 標(biāo)志字段在分片數(shù)據(jù)報(bào)中起了很大作用,在數(shù)據(jù)報(bào)分片時(shí)把它的值復(fù)制到每片中。標(biāo)志字段的其中一個(gè)比特稱作“不分片”位,用其中一個(gè)比特來(lái)表示“更多的片”。除了最后一片外,其他每個(gè)組成數(shù)據(jù)報(bào)的片都要把該比特置1。片偏移字段指的是該片偏移原始數(shù)據(jù)報(bào)開始處的位置。另外,當(dāng)數(shù)據(jù)報(bào)被分片后,每個(gè)片的總長(zhǎng)度值要改為該片的長(zhǎng)度值。如果將標(biāo)志字段的比特置1,則IP將不對(duì)數(shù)據(jù)報(bào)進(jìn)行分片。相反把數(shù)據(jù)報(bào)丟棄并發(fā)送一個(gè)I C M P差錯(cuò)報(bào)文并通知源主機(jī)廢棄的原因。如果不是特殊需要,則不應(yīng)該置1;最右比特置1表示該報(bào)文不是最后一個(gè)IP分片。 故意發(fā)送部分IP分片而不是全部,則會(huì)導(dǎo)致目標(biāo)主機(jī)總是等待分片消耗并占用系統(tǒng)資源。某些分片風(fēng)暴攻擊就是這種原理。 這里以以太網(wǎng)為例,由于以太網(wǎng)傳輸電氣方面的限制,每個(gè)以太網(wǎng)幀都有最小的大小64bytes最大不能超過1518bytes, 拋去以太網(wǎng)幀的幀頭(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校驗(yàn)部分4Bytes,那么剩下承載上層協(xié)議的地方也就是Data域最大就只能有1500Bytes,這就是前面所說的MTU的值。這個(gè)也是網(wǎng)絡(luò)層協(xié)議非常關(guān)心的地方,因?yàn)榫W(wǎng)絡(luò)層的IP協(xié)議會(huì)根據(jù)這個(gè)值來(lái)決定是否把上層傳達(dá)下來(lái)的數(shù)據(jù)進(jìn)行分片。就好比一個(gè)盒子沒法裝下一大塊面包,我們需要把面包切成片,裝在多個(gè)盒子里面一樣的道理。 2、MTU原理 對(duì)于UDP協(xié)議而言,這個(gè)協(xié)議本身是無(wú)連接的協(xié)議,對(duì)數(shù)據(jù)包的到達(dá)順序以及是否正確到達(dá)不甚關(guān)心,所以一般UDP應(yīng)用對(duì)分片沒有特殊要求。 對(duì)于TCP協(xié)議而言就不一樣了,這個(gè)協(xié)議是面向連接的協(xié)議,對(duì)于TCP協(xié)議而言它非常在意數(shù)據(jù)包的到達(dá)順序以及是否傳輸中有錯(cuò)誤發(fā)生。所以有些TCP應(yīng)用對(duì)分片有要求---不能分片(DF)。 3、MSS的原理 MSS就是TCP數(shù)據(jù)包每次能夠傳輸?shù)淖畲髷?shù)據(jù)分段。為了達(dá)到最佳的傳輸效能TCP協(xié)議在建立連接的時(shí)候通常要協(xié)商雙方的MSS值,這個(gè)值TCP協(xié)議在實(shí)現(xiàn)的時(shí)候往往用MTU值代替(需要減去IP數(shù)據(jù)包包頭的大小20Bytes和TCP數(shù)據(jù)段的包頭20Bytes)所以往往MSS為1460。通訊雙方會(huì)根據(jù)雙方提供的MSS值得最小值確定為這次連接的最大MSS值。 當(dāng)IP數(shù)據(jù)報(bào)被分片后,每一片都成為一個(gè)分組,具有自己的IP首部,并在選擇路由時(shí)與其他分組獨(dú)立。這樣,當(dāng)數(shù)據(jù)報(bào)的這些片到達(dá)目的端時(shí)有可能會(huì)失序,但是在IP首部中有足夠的信息讓接收端能正確組裝這些數(shù)據(jù)報(bào)片。 盡管IP分片過程看起來(lái)是透明的,但有一點(diǎn)讓人不想使用它:即使只丟失一片數(shù)據(jù)也要重傳整個(gè)數(shù)據(jù)報(bào)。因?yàn)?span>IP層本身沒有超時(shí)重傳的機(jī)制——由更高層來(lái)負(fù)責(zé)超時(shí)和重傳(T C P有超時(shí)和重傳機(jī)制,但UDP沒有。一些UDP應(yīng)用程序本身也執(zhí)行超時(shí)和重傳)。當(dāng)來(lái)自T C P報(bào)文段的某一片丟失后,T C P在超時(shí)后會(huì)重發(fā)整個(gè)T C P報(bào)文段,該報(bào)文段對(duì)應(yīng)于一份IP數(shù)據(jù)報(bào)。沒有辦法只重傳數(shù)據(jù)報(bào)中的一個(gè)數(shù)據(jù)報(bào)片。事實(shí)上,如果對(duì)數(shù)據(jù)報(bào)分片的是中間路由器,而不是起始端系統(tǒng),那么起始端系統(tǒng)就無(wú)法知道數(shù)據(jù)報(bào)是如何被分片的。就這個(gè)原因,經(jīng)常要避免分片。 五、IP分片算法的原理 分片重組是IP層一個(gè)最重要的工作,其處理的主要思想:當(dāng)數(shù)據(jù)包從一個(gè)網(wǎng)絡(luò)A進(jìn)入另一個(gè)網(wǎng)絡(luò)B時(shí),若原網(wǎng)絡(luò)的數(shù)據(jù)包大于另一個(gè)網(wǎng)絡(luò)的最大數(shù)據(jù)包的長(zhǎng)度,必須進(jìn)行分片。因而在IP數(shù)據(jù)包的報(bào)頭有若干標(biāo)識(shí)域注明分片包的共同標(biāo)識(shí)號(hào)、分片的偏移量、是否最后一片及是否允許分片。傳輸途中的網(wǎng)關(guān)利用這些標(biāo)識(shí)域進(jìn)行分片,目有主機(jī)把收到的分片進(jìn)行重組以恢重?cái)?shù)據(jù)。因此,分片包在經(jīng)過網(wǎng)絡(luò)監(jiān)測(cè)設(shè)備、安全設(shè)備、系統(tǒng)管理設(shè)備時(shí),為了獲取信息、處理數(shù)據(jù),都必須完成數(shù)據(jù)包的分片或重組。
R:保留未用;DF:Don’t Fragment,“不分片”位,如果將這一比特置1,IP 層將不對(duì)數(shù)據(jù)報(bào)進(jìn)行分片;MF:More Fragment,“更多的片”,除了最后一片外,其它每個(gè)組成數(shù)據(jù)報(bào)的片都要把比特置1;Fragment Offset:該片偏移原始數(shù)據(jù)包開始處的位置。偏移的字節(jié)數(shù)是該值乘以8。 六、總結(jié) 此論文闡述了什么是IP分片,并舉例說明了IP的分片現(xiàn)像及其特點(diǎn)。簡(jiǎn)單論述了IP分片的原理。并加以重點(diǎn)分析了MTU,闡述了MTU在IP分片技術(shù)中所起的作用,簡(jiǎn)略討論了ICMP不可達(dá)差錯(cuò),利用UDP觀察路徑MTU發(fā)現(xiàn)過程。簡(jiǎn)述了MSS的作用以及其值是怎樣得來(lái)的。本文只是對(duì)IP分片作了一個(gè)小小的論述。 |
|
來(lái)自: syden1981 > 《協(xié)議,規(guī)范》