1.建立连接
建立连接的过程也叫“三次握手”:
(1)客户端发送一个SYN段指明打算连接的服务器端口以及初始序号;
(2) 服务器发回包含服务器的初始序号的SYN段作为应答;
(3) 客户端对服务器的SYN报文进行确认。 只有在这个时候才会发SYN报文。
2. 终止连接
终止连接的过程也叫"四次挥手":
(1) 客户端发送一个FIN包,进入主动关闭(FIN_WAIT_1)状态,服务端收到报文后进入被动关闭(CLOSE_WAIT)状态;
(2) 服务端给客户端回一个ACK表示收到了FIN包,客户端进入FIN_WAIT_2状态。至此,客户端不能再给服务端发送数据了,但能发送ack;
(3) 服务端给客户端发送一个FIN包,服务端进入LAST_ACK状态,客户端收到FIN包后进入TIME_WAIT状态;
(4) 客户端给服务端发送ACK,连接终止。
TCP的半关闭是指一端发送了FIN包,另一端回了ACK,这个方向上的连接断开了,但另一端不发FIN包,连接没有断开,所以数据只在这一个方向上传输。
TIME_WAIT状态又叫2MSL等待状态。MSL是指报文最大生存时间。就是指客户端在发回最后一个ACK之后,必须等待2MSL时间才能关闭连接。这样可以防止ACK丢失之后,另一端超时重发FIN,而连接已经关闭的情况。
在处于TIME_WAIT状态时,客户端和服务端和IP地址、端口号都不能再被使用,任何迟到的报文也会被丢弃。
平静时间是指TCP在重启动后MSL秒内不能建立任何连接。