searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

一种FPGA进行网络异常数据包过滤的方法

2024-09-06 10:11:57
14
0

网络数据包是网络上信息传输的基本单位。在FPGA中,以太网数据包的传送需遵循一定的协议。例如,采用avalon stream格式进行数据包传输。

图1 avalon stream格式数据包

每一个以太网数据包被切分为若干个avst packet。对于avst packet格式的数据包,在网络中,可能会出现以下异常情况。

1)数据包到来时,首个avst packetsop没有拉高;

2)一个数据包传输完成后,最后一个avst packeteop没有拉高;

3)一个数据包过长(超过以太网MTU),或过短(小于64字节)。

当出现以上异常情况时,链路上的以太网数据包实际上是错误的。我们可以在FPGA中采用在缓存FIFO前增加过滤器的手段,将异常数据包检测出来并上报,阻止异常数据的进一步传播。

过滤器模块采用状态机对输入的avst packet进行检查。状态如下图2所示。

图2 过滤器模块状态图

1)系统复位时处于IDLE状态。对于正常数据包,IDLE状态接收一个数据包的第一个avst packet,并转入PROC状态。PROC状态处理后续的avst packet,并在收到eop后转回IDLE状态。

2)在IDLE状态,输入数据如果没有拉高sop,则报告丢失sop错误,丢弃数据包并仍然保持在IDLE状态内。此时因这个数据包被丢弃,过滤器无视接下来的输入数据,直到下一个sop出现。

3)在IDLE状态,输入数据如果sopeop同时拉高,则是一个短数据包。此时检测其长度,如果低于阈值则标记为过短包,报告过短包错误并丢弃这个数据包,并仍然保持在IDLE状态内。

4)在PROC状态,输入数据如果再次出现sop,则意味着上一个数据包的eop丢失了。此时报告丢失eop错误,丢弃上一个以及这一个数据包,并返回IDLE状态。

5)在PROC状态,存在计数器对输入数据包的累计长度进行统计。如果超过阈值,则标记为过长包,报告过长包错误,丢弃这个数据包并返回IDLE状态。

采用该过滤器可以有效过滤各种异常数据包情况,例如,下图所示的仿真波形展示了几种异常的数据包。

图3 过滤网口反压、丢失sop、丢失eop

从图3中可以看到,过滤器可以正确检测出网口反压丢包、丢失sop、丢失eop的情况,并进行上报。

 

图4 过滤过短过长数据包

从图4中可以看到,过滤器可以正确检测出过短数据包、过长数据包,并进行上报。最后为正确数据包的正常通行。

 

 

0条评论
0 / 1000
cuixinyu
2文章数
0粉丝数
cuixinyu
2 文章 | 0 粉丝
cuixinyu
2文章数
0粉丝数
cuixinyu
2 文章 | 0 粉丝
原创

一种FPGA进行网络异常数据包过滤的方法

2024-09-06 10:11:57
14
0

网络数据包是网络上信息传输的基本单位。在FPGA中,以太网数据包的传送需遵循一定的协议。例如,采用avalon stream格式进行数据包传输。

图1 avalon stream格式数据包

每一个以太网数据包被切分为若干个avst packet。对于avst packet格式的数据包,在网络中,可能会出现以下异常情况。

1)数据包到来时,首个avst packetsop没有拉高;

2)一个数据包传输完成后,最后一个avst packeteop没有拉高;

3)一个数据包过长(超过以太网MTU),或过短(小于64字节)。

当出现以上异常情况时,链路上的以太网数据包实际上是错误的。我们可以在FPGA中采用在缓存FIFO前增加过滤器的手段,将异常数据包检测出来并上报,阻止异常数据的进一步传播。

过滤器模块采用状态机对输入的avst packet进行检查。状态如下图2所示。

图2 过滤器模块状态图

1)系统复位时处于IDLE状态。对于正常数据包,IDLE状态接收一个数据包的第一个avst packet,并转入PROC状态。PROC状态处理后续的avst packet,并在收到eop后转回IDLE状态。

2)在IDLE状态,输入数据如果没有拉高sop,则报告丢失sop错误,丢弃数据包并仍然保持在IDLE状态内。此时因这个数据包被丢弃,过滤器无视接下来的输入数据,直到下一个sop出现。

3)在IDLE状态,输入数据如果sopeop同时拉高,则是一个短数据包。此时检测其长度,如果低于阈值则标记为过短包,报告过短包错误并丢弃这个数据包,并仍然保持在IDLE状态内。

4)在PROC状态,输入数据如果再次出现sop,则意味着上一个数据包的eop丢失了。此时报告丢失eop错误,丢弃上一个以及这一个数据包,并返回IDLE状态。

5)在PROC状态,存在计数器对输入数据包的累计长度进行统计。如果超过阈值,则标记为过长包,报告过长包错误,丢弃这个数据包并返回IDLE状态。

采用该过滤器可以有效过滤各种异常数据包情况,例如,下图所示的仿真波形展示了几种异常的数据包。

图3 过滤网口反压、丢失sop、丢失eop

从图3中可以看到,过滤器可以正确检测出网口反压丢包、丢失sop、丢失eop的情况,并进行上报。

 

图4 过滤过短过长数据包

从图4中可以看到,过滤器可以正确检测出过短数据包、过长数据包,并进行上报。最后为正确数据包的正常通行。

 

 

文章来自个人专栏
fpga技术解析
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0