拓扑: client--->AA-tproxy-BB----------server
client server 之间使用tproxy 代理
从抓取报文来看,在管理连接的时候出现大量ack报文,以上不是完整报文
直接给结论吧:
- server主动关闭发出FIN, BB 收到FIN后,发出Fin-ack,同时去AA 主动关闭;所以socket 状态为:BB为last_ack
- server 收到BB 的fin_ack后,主动发出ack 此时server 进入time_wait 状态, 同时BB收到ack 就进入close状态
- client 收到fin 后 内核协议栈回复ack 同时应用层会发出fin,如果此时client 的被动FIN 延时发送, 同时 AA socket 处于Fin2 状态 如果FIN2 超时被回收, 此时server 处于time_wait 状态
- client 响应发送FIN 此时 tproxy 代理没有找到之前的socket,FIN2 下超时回收,此时应该怎么处理??
- 如果不转发 就会触发client的超时重传最后回收
- 如果转发就转发到server 端 ,但是server 端处于time-wait 状态,此时就会响应ack 报文然后就出现了ack 震荡!!
目前想到的解决办法是:使用rst 关闭或者 不转发了