一、概述
以太网(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