目录
三次握手和四次挥手过程
报文段1:客户端向服务器端发出连接请求。
报文段2:服务器端发出对客户端的应答 + 连接请求。
报文段3:客户端应答。
至此,客户端和服务器端建立连接
报文段4:一般的请求结束都是由客户端发起的;这里客户端发起了请求释放连接
报文段5:服务器端应答。
报文段6:服务器端发送释放连接请求 。
注意:客户端在收到服务器端应答之后不会直接关闭连接,而是会状态转移为TIME_WAIT状态 ,会等待 2MSL 的时间(MSL为 最大生存周期)
目的就是为了:1.进行可靠的终止连接 2.丢弃迟来的报文段
报文段7:客户端应答。
至此,客户端和服务器端断开连接。
半连接状态
客户端没有发送第三次报文段时,服务器端此时就是处于SYN_RCVD(半连接状态),如果连接的个数大于backlog(最大的完全连接状态),就会在SYN_RCVD状态,并且会放在一个存放半连接状态的请求队列中去。
半关闭状态
因为TCP连接是全双工的,所以他接受某一端独立关闭
报文段4发出后,客户端就处于半关闭状态,这个状态下客户端仍然可以收到服务器端传来的数据,直到服务器端将数据全发送完。
半打开状态
这里要和半关闭状态做区分,不要以为一端是半关闭状态,另一半就是半打开状态(这是错误的)
半打开状态是指,一端由于种种原因终止连接(也有可能是异常中止连接),导致另一端接收不到FIN,所以另一端仍然会给这一端发送消息。此时就会返回一个复位报文段来告诉他,另一半终止连接了。(如果你访问不存在的端口也会返回一个复位报文段)