TCP连接管理机制(三次握手和四次挥手)

TCP连接管理机制(三次握手和四次挥手)

建立连接都是单方向建立的。

1.三次握手(可以超过三次,但不能低于三次)

(1)过程:客户端发送一个建立连接的SYN请求到服务端,服务端接收以后,返回对这条SYN建立连接请求的一个ACK响应,并且发送一个服务端到客户端建立连接的一个SYN请求 ,合并发送到客户端,客户端接收以后,这个时候客户端到服务端的连接就建立起来了。客户端还要回复一个ACK响应给服务端,服务端接收到这个响应以后,服务端到客户端就连接起来了。

    第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

    第二次握手:服务器B收到SYN包,必 须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

    第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

2.四次挥手

(1)可以五次挥手,不能三次挥手。第二次ACK是系统内核实现的ACK响应,而FIN是用户程序手动关闭,目的是让用户程序在关闭连接前处理需要的任务(如释放资源)。

(2)过程:客户端给服务端发送一个关闭连接的FIN请求,服务端接受之后发送一个ACK确认数据报给客户端,客户端到服务端的连接就关闭了。服务端给客户端发送一个关闭连接的FIN请求,客户端接受以后发送一个ACK确认数据报,服务端到客户端的连接就关闭了。

(3)CLOSE_WAIT不可能主动关闭。

(4)在第三次数据传输,服务端发送FIN请求道客户端,客户端处于TIME_WAIT,为什么不能设置为CLOSED?

        第四次ACK响应报文可能丢包,导致服务端无法关闭连接,需要服务端重新发送FIN请求,所以客户端必须等待最大超时时间(2MSL)。