鏈路層具有最大傳輸單元MTU這個(gè)特性,它限制了數(shù)據(jù)幀的最大長度,不同的網(wǎng)絡(luò)類型都有一個(gè)上限值。以太網(wǎng)的MTU是1500,你可以用 netstat -i 命令查看這個(gè)值。如果IP層有數(shù)據(jù)包要傳,而且數(shù)據(jù)包的長度超過了MTU,那么IP層就要對(duì)數(shù)據(jù)包進(jìn)行分片(fragmentation)操作,使每一片的長度都小于或等于MTU。我們假設(shè)要傳輸一個(gè)UDP數(shù)據(jù)包,以太網(wǎng)的MTU為1500字節(jié),一般IP首部為20字節(jié),UDP首部為8字節(jié),數(shù)據(jù)的凈荷(payload)部分預(yù)留是1500-20-8=1472字節(jié)。如果數(shù)據(jù)部分大于1472字節(jié),就會(huì)出現(xiàn)分片現(xiàn)象。
IP首部包含了分片和重組所需的信息:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |R|DF|MF| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|<-------------16-------------->|<--3-->|<---------13---------->|
Identification:發(fā)送端發(fā)送的IP數(shù)據(jù)包標(biāo)識(shí)字段都是一個(gè)唯一值,該值在分片時(shí)被復(fù)制到每個(gè)片中。
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。
另外,當(dāng)數(shù)據(jù)報(bào)被分片后,每個(gè)片的總長度值要改為該片的長度值。