[TC8测试]TCP_FLAGS_INVALID_13_Flag SYN,ACK

TCP_FLAGS_INVALID_13_Flag SYN,ACK

测试目的

验证TCP协议栈在LAST-ACK状态下,收到一个携带SYN和ACK标志、且序列号不合法的数据段时,能否正确响应并保持连接状态不变。

UT测试方法

Precondition:

DUT正常通信,UT正常运行,DUT处于LAST-ACK状态

Step to reproduce:

Step1,UT使DUT进入LAST-ACK状态(DUT发送FIN后等待ACK)

Step2,测试端发送SYN+ACK(SEQ=4194342,在接收窗口外,RST=0)

Step3,测试端监听DUT接口

Step4,测试端验证DUT是否仍处于LAST-ACK状态

Expected results:

At Step3,DUT应回复ACK(SEQ=3066232763, ACK=2)指示正确的预期SEQ号

At Step4,DUT应保持在LAST-ACK状态

需求出处:

TC8 5.8.6.6.13 p342 (MUST) / RFC 793 s3.9 p69

非UT测试方法

Precondition:

一台Ubuntu电脑,T1转RJ45转换器,Ubuntu电脑可与DUT正常通信

Step to reproduce:

1、在Ubuntu系统配置vlan2网卡,ip=172.16.2.97

2、编译运行EthUnitTest,执行如下

3、在DUT系统执行如下

4、当Ubuntu执行完close接口,发送FIN后,立即在DUT系统端输入如下命令

bash 复制代码
iptables -A INPUT -s 172.16.2.97 -d 172.16.2.99 -p tcp --tcp-flags ACK ACK -j DROP

以此过滤Ubuntu发给DUT的ACK报文,这样当DUT收到FIN+ACK后,调用close接口回复FIN+ACK时,Ubuntu回复的ACK报文就会被过滤,导致DUT测试程序处于LAST_ACK状态。

以下是用netstat命令确认LAST_ACK状态的过程

这时,Ubuntu端再输入指令发送SYN+ACK验证DUT是否会回复ACK并指示正确的预期SEQ号。

注意这里发送SYN+ACK前要先在DUT系统端执行iptables -F关闭防火墙(注意要眼疾手快 ),否则会被过滤。

之所以要眼疾手快,因为DUT调用close接口回复FIN+ACK后,一直没有收到Ubuntu的ACK,会触发FIN+ACK重传。如果恰好在关闭防火墙时有FIN+ACK重传并且收到了ACK,DUT就会进入TIME_WAIT状态,不符合测试要求。

报文分析

测试源码请见后续博文

相关推荐
爱和冰阔落1 小时前
【Linux网络】UDP 聊天室怎么实现?从在线用户管理、消息广播到双线程收发与线程池
linux·运维·网络·udp
车载中间件通信1 小时前
[TC8测试]TCP_FLAGS_PROCESSING_06
数据库·网络协议·tcp/ip·中间件·tc8
pikapika~~~1 小时前
计算机网络八股
服务器·网络·计算机网络
艾莉丝努力练剑2 小时前
【AI大模型接入SDK】ChatServer接口测试
网络·c++·人工智能·学习·ai·大模型·sdk
蓝祁子yoky2 小时前
Qt学习日记 Day15:网络编程(二)- UDP基础
网络·qt·学习
云川之下2 小时前
[ensp] 交换机入门配置例子(带vlan)
运维·服务器·网络
别讲概念3 小时前
JavaEE(6)TCP_IP
网络·tcp/ip·java-ee
承渊政道3 小时前
Linux网络学习【数据链路层、ARP工作过程与ARP欺骗详解】
linux·网络·学习·数据链路层·arp
李纲明3 小时前
WordPress 全站 HTTPS 后仍显示「不安全」或锁被划掉:先清混合内容,再核证书链与强制跳转
网络协议·安全·https·wordpress·devdiy·混合内容