TCP_IP协议-TCP三次握手和四次挥手

TCP是面向连接的协议,它基于运输连接来传送TCP报文段,TCP运输连接的建立和释放,是每一次面向连接的通信中必不可少的过程,建立连接时的数据包是没有实际内容的,没有应用层的数据。

三次握手-建立连接

三次握手图:

第一次握手:

客户端发送含有SYN=1,seq=m的报文传递给服务器端,并且进入SYN_SEND状态。

第二次握手:

确定连接:确定连接时服务端给客户端发一个数据报文,该数据包中SYN =1, ACK = m+1,seq=n,状态由 LISTEN 改为 SYN-RCVD。

拒绝连接:拒绝连接,会往客户端发一个数据包,该数据包中 RST 标志位为 1,客户端会报Connection refused。

丢弃该数据包:丢弃客户端的数据包,超过一定时间后客户端会报Connection timeout

第三次握手:

客户端收到服务器端的SYN=1的数据包,并且给服务端响应一个报文,该数据包中SYN =1, ACK = n+1,seq=m+1,进入Established状态。

四次挥手-关闭连接器

客户端、服务端都可以主动发起断开连接

四次挥手图:

第一次挥手:

客户端向服务端发送数据包,该数据包中FIN=1、seq=m,此时客户端状态由ESTABLISHED-->>FIN_WAIT_1。

第二次挥手(此次只能说明服务端收到客户端的断开请求而不做任何决定):

服务端收到客户端含有FIN=1标志位的数据包,此时知道客户端需要断开连接,服务端会向客户端发送应答数据包,改数据包中ACK=1,ack=m+1,seq=n,此时服务端状态由ESTABLISHED-->CLOSE_WAIT,此时客户端状态由 FIN_WAIT_1 变为 FIN_WAIT_2。

第三次挥手:

服务端再次向客户端发送一个数据包,该数据包中FIN=1、ACK=1、ack=m+1、seq=w。客户端现断开连接并释放资源,此时服务端状态由CLOSE_WAIT-->>LAST_ACK。

第四次挥手:

客户端收到服务端再次发送的消息 FIN=1 标志位的数据包,说明服务端同意断开连接,但是客户端为了慎重起见,不会立马关闭连接,而是改状态,并且向服务端发送信息 ACK=1 标志位的应答数据包,ack=w+1,seq=m+1,此时客户端状态由 FIN_WAIT_2 -->> TIME_WAIT。