FPGA——UDP包分片概述
一、概述
以太网(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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话