TCP断开连接的四次挥手过程中,Client端需要做的事情是:发起断开连接请求,接收Server端断开连接请求并响应。
如果Client端不使用TCP/IP协议栈和Socket接口函数完成连接,而是通过组装以太网报文完成连接,需要注意:
- Client不使用TCP/IP协议栈,所以不应该配置TCP/IP协议栈。否则收到Server端的ACK+FIN后协议栈会回复RST。
- Server端在收到Client的FIN报文后,首先回复ACK确认。Client收到此ACK时需要识别,不做任何反应。
此次的CAPL代码设计思路参考文章《on ethernetPacket事件函数接收报文时标准的处理流程》中的思想,遵循网络分层处理原则。具体细节请查看代码注释。
完整代码:
variables
{ethernetPacket ppkt;
}on ethernetPacket *
{//只解析ECU发送的,不解析CANoe Switch Segment转发的if (this.dir != 0)return;//链路层解析if (this.destination == ethGetMacAddressAsNumber("02:00:00:00:00:52") ||this.destination == ethGetMacAddressAsNumber("FF:FF:FF:FF:FF:FF")){if (this.type == 0x0800)//ipv4{Ipv4ProtocolProcess(this);}if (this.type == 0x0806){ArpProtocolProcess(th