问题描述
ISOLAR-AB中配置了以太网tcpip后用wireshark抓包,抓到的包里前五次通信:
A->B: [SYN]
B->A: [SYN,ACK]
A->B: [ACK]
A->B: [PSH,ACK]
B->A: [FIN,ACK]
随后重复进行了几千次的
A->B: [PSH,ACK]
B->A: [ACK]
最后一条是
B->A: [RST,ACK]
想请教下1. 握手建立后B立马发起挥手的可能原因是什么;
2.为什么都挥手了,还可以进行几千次的数据传输;
3. 最后一次B发起Reset是否和第五次的[FIN, ACK]有关?比如等待了2*MSL后一直没等到[ACK]从而发起RST。
排查
疑问3:
Q:最后一次B发起Reset是否和第五次的[FIN, ACK]有关?比如等待了2*MSL后一直没等到[ACK]从而发起RST。
推测:ISOLAR生成的代码中有FinWaitTime:FinWait2TimeOut_u32,当前代码该变量被设置为3000,表明当Fin发起后(挥手发起后),会等待3000个TcpIpMainFunctionPeriod,而ISOLAR中TcpIpMainFunctionPeriod被设置为0.001s,故意味着当B发出[FIN,ACK]后,会等待3000*0.001s,若一直未收到应答,则认为出现异常,中断通信。结合Wireshark抓取到的日志,3次日志里通信皆只维持了3s,符合推测。