天天看點

關于udp傳輸分片問題-MTU關于udp傳輸分片問題-MTU

關于udp傳輸分片問題-MTU

編者:李國帥

qq:9611153 微信lgs9611153

時間:2008/6/1

背景原因:

相關問題在2008年遇到,簡要提供如下建議。

對于大批量,高頻度的網絡收發,總會遇到這樣的問題。

概念:

MTU,即Maximum Transmission Unit(最大傳輸單元),此值設定TCP/IP協定傳輸資料報時的最大傳輸單元。

設定多大的MTU值取決于你的上網方式,不同的上網方式支援不同的MTU,下面列出了一些上網方式的MTU值:

EtherNet(一般上網方式,預設值):1500

PPPoE/ADSL:1492

Dial Up/Modem:576

鍊路層MTU:

鍊路層具有最大傳輸單元MTU這個特性,它限制了資料幀的最大長度,不同的網絡類型都有一個上限值。

鍊路層一般隻能發1514,就是MTU的大小,多餘的就就要分片,理論是64K,但是實際中,首先網卡要支援64K的,但是現在的千兆一般也才支援8k巨幀,然後交換機也要支援巨幀,普通交換機也不支援,支援的一般也是8K,是以,實際使用中UDP在區域網路一般是1514(含42位元組頭),而如果要通過路由器,路由器所支援的UDP一般是536,這樣又隻能用536的了

具體分析如下:

一個IPv4包需要14位元組mac頭,20位元組IP頭,很可能需要8位元組ppp封裝(ADSL上網)。

一個以太網封包大小限制1514,是以一個ipv4包的資料大概有1472或者1480

IP層分片

我們假設資料的淨荷(payload)部分預留是1472位元組。如果資料部分大于1472位元組,就會出現分片現象。

另外IP層對資料包進行分片(fragmentation)操作,使每一片的長度都小于或等于MTU。

IP首部包含了分片和重組所需的資訊:

關于udp傳輸分片問題-MTU關于udp傳輸分片問題-MTU

Identification:發送端發送的IP資料包辨別字段都是一個唯一值,該值在分片時被複制到每個片中。

R:保留未用。

DF:Don't Fragment,“不分片”位,如果将這一比特置1 ,IP層将不對資料報進行分片。

MF:More Fragment,“更多的片”,除了最後一片外,其他每個組成資料報的片都要把該比特置1。

Fragment Offset:該片偏移原始資料包開始處的位置。偏移的位元組數是該值乘以8。

當資料報被分片後,每個片的總長度值要改為該片的長度值。

而每一個分片的有效載荷需要減去分片資訊(32位元組),是以

如果要發送的IP資料包是4096位元組(包含tcp/udp頭),

發送的IP資料20(IP頭)+4090,将會被分三次發送:

         32(IP分標頭部)+(1472-32),

         32(IP分標頭部)+(1472-32),

         32(IP分標頭部)+(1230+填充資料)。

每次發送的IP資料都為發送3次,每次1500位元組。