一个tcp连接client crash后的问题
client和svr tcp已经建立连接(传输数据);client 建立连接时bind 本地ip和port
而后client 崩溃,svr不知,所以svr的连接仍然是established(svr 没有使用keep_alive检测存活,也没有和client有心跳检测);
而后client重启,再次准备建立连接,以同样的client_ip,client_port connect svr_ip, svr_port, connect会发生什么呢? 对svr来讲,认为这条连接已经是存在的,那么server如何处理client的syn分节呢?
困扰这个问题,请大侠赐教~
[解决办法]
从svr的tcp协议栈来看,established中收到syn是非法的,
具体的结果要看tcp协议栈的实现,
有些会认为数据非法,reset掉当前连接;
有的则看syn所对应的seq是否在当前连接的ack的允许范围内(即期望对方的seq所在的范围),
不在则简单地丢弃该包,在就reset。