原理說(shuō)明
因?yàn)閰f(xié)議數(shù)據(jù)單元的包頭和包尾的長(zhǎng)度是固定的,MTU越大,則一個(gè)協(xié)議數(shù)據(jù)單元的承載的有效數(shù)據(jù)就越長(zhǎng),通信效率也越高。MTU越大,傳送相同的用戶數(shù)據(jù)所需的數(shù)據(jù)包個(gè)數(shù)也越低。
MTU也不是越大越好,因?yàn)镸TU越大, 傳送一個(gè)數(shù)據(jù)包的延遲也越大;并且MTU越大,數(shù)據(jù)包中 bit位發(fā)生錯(cuò)誤的概率也越大。
MTU越大,通信效率越高而傳輸延遲增大,所以要權(quán)衡通信效率和傳輸延遲選擇合適的MTU。
以以太網(wǎng)傳送IPv4報(bào)文為例。MTU表示的長(zhǎng)度包含IP包頭的長(zhǎng)度,如果IP層以上的協(xié)議層發(fā)送的數(shù)據(jù)報(bào)文的長(zhǎng)度超過(guò)了MTU,則在發(fā)送者的IP層將對(duì)數(shù)據(jù)報(bào)文進(jìn)行分片,在接收者的IP層對(duì)接收到的分片進(jìn)行重組。
這里舉一個(gè)具體的例子說(shuō)明IP包分片的原理。以太網(wǎng)的MTU值是1500 bytes,假設(shè)發(fā)送者的協(xié)議高層向IP層發(fā)送了長(zhǎng)度為3008 bytes的數(shù)據(jù)報(bào)文,則該報(bào)文在添加20 bytes的IP包頭后IP包的總長(zhǎng)度是 3028 bytes,因?yàn)?028 > 1500,所以該數(shù)據(jù)報(bào)文將被分片,
注意:分片時(shí)僅僅對(duì)上層的數(shù)據(jù)進(jìn)行分片,不需要對(duì)原來(lái)的IP首部分片,所以要分片的數(shù)據(jù)長(zhǎng)度只有3008,而不是3028. 這特別容易出錯(cuò)。
分片過(guò)程如下:
1. 首先計(jì)算最大的IP包中IP凈荷的長(zhǎng)度 =MTU-IP包頭長(zhǎng)度=1500-20= 1480 bytes。
2. 然后把3008 bytes按照1480 bytes的長(zhǎng)度分片,將要分為3片,3008= 1480+1480+48。
3. 最后發(fā)送者將為3個(gè)分片分別添加IP包頭,組成3個(gè)IP包后再發(fā)送,3個(gè)IP包的長(zhǎng)度分別為1500 bytes、1500 bytes和 68 bytes。
從以上分片例子可以看出第一、二個(gè)分片包組成的IP包的長(zhǎng)度都等于MTU即1500 bytes。
在網(wǎng)絡(luò)通訊中,需要盡量避免發(fā)生分片和重組,因?yàn)榉制亟M對(duì)網(wǎng)絡(luò)性能影響較大。數(shù)據(jù)包發(fā)送時(shí)選擇合適的MTU大小對(duì)提高通訊性能很有必要。MTU大小的選擇有協(xié)議協(xié)商方式,通過(guò)全路徑的MTU發(fā)現(xiàn)機(jī)制,找到整條路徑的最小MTU(也就是路徑MTU),然后報(bào)文發(fā)送式小于等于路徑MTU,這就避免了數(shù)據(jù)傳輸過(guò)程中產(chǎn)生分片,從而提高數(shù)據(jù)轉(zhuǎn)發(fā)性能。MTU的協(xié)議發(fā)現(xiàn)機(jī)制由于安全等方面的原因,并不能總是生效,這時(shí)候就需要根據(jù)網(wǎng)絡(luò)的特性選擇合理的MTU。如果在報(bào)文傳送過(guò)程中分片是不可避免的,那么要想辦法讓重組盡量在終端進(jìn)行,避免在轉(zhuǎn)發(fā)路徑中進(jìn)行。