原因:
1)两次握手是最基本的,一般情况下能保证tcp连接正常进行。

2)需要第三次握手是为了防止已失效的请求报文段突然又传送到了服务端而产生连接的误判 。
      假如没有第三次握手,服务端接收到失效的请求报文段就会认为连接已建立,从而进入等待客户端发送数据的状态。但客户端并没有发出请求,所以不会发送数据。于是服务端就会一直处于等待状态,从而浪费资源。
第三次握手失败后:
1)在第二次握手,服务器端向客户端发送SYN+ACK报文后,就会启动一个定时器,等待客户端返回的ACK报文。
2)如果第三次握手失败的话,客户端给服务端返回了ACK报文,服务端并不能收到这个ACK报文。那么服务端就会启动超时重传机制,超过规定时间后重新发起第二次握手,向客户端发送SYN+ACK。重传次数根据/proc/sys/net/ipv4/tcp_synack_retries来指定,默认是5次。
3)如果重传指定次数到了后,仍然未收到ACK应答,那么一段时间后,服务端会自动关闭这个连接。但客户端认为这个连接已经建立,如果客户端向服务端写数据,服务端将回应RST包、强制关闭TCP连接,以防止SYN攻击。

发表评论

邮箱地址不会被公开。 必填项已用*标注