一、概述
以太網(Ethernet)數據幀的長度必須在46-1500字節之間,這是由以太網的物理特性決定的.
這個1500字節被稱為鏈路層的MTU(最大傳輸單元).
在實際使用中,單次UDP報文傳輸的數據量有可能會大於1500字節,因此需要用到UDP分片技術
二、UDP分片
(1)UDP封裝
(2)IP首部
- 分段標識:唯一確定一份IP數據報
- DF:(Don’t Fragment)0表示允許分片,1表示不許分片
- MF:除了最后一片外,其他每片都把該位置為1
- 段偏移:指的是該片偏移原始數據報開始處的位置
(3)分片
- 每片的總長度值要修改為該片的長度值
- 任何傳輸層的首部都只出現在第一片數據中,除第一片外,其他片沒有UDP首部
三、FPGA對於分片包的判斷
always @(posedge clk or negedge rst_n)begin
if(!rst_n)
fragment_state <= 0;
else if(cnt_dtlen == 30 & add_cnt_dtlen)begin
if(fragment_info[12:0] == 0 & fragment_info[14:13] == 0)
fragment_state <= 0;//不分片 (段偏移 == 0, MF = 0)
else if(fragment_info[12:0] == 0 & fragment_info[14:13] == 1)
fragment_state <= 1;//分片第一段 (段偏移 == 0, MF = 1,記下分段標識 )
else if(fragment_info[12:0] != 0 & fragment_info[14:13] == 1)
fragment_state <= 2;//分片中間段 (段偏移 != 0, MF = 1,比較分段標識 )
else if(fragment_info[12:0] != 0 & fragment_info[14:13] == 0)
fragment_state <= 3;//分片最后一段 (段偏移 != 0, MF = 0,比較分段標識 )
end
end