Bootstrap

TCP三次握手和四次挥手的理解

三次握手


第一次握手:

客户端发出 请求报文其中SYN应=1,选择一个序列号x

第二次握手:

服务端接收到之后回复 确认报文,其中SYN应=1,ACK=1,确认号是x+1,同时为自己初始化序列号y

第三次握手:

客户端收到请求之后给出 确认报文,ACK=1,ack=y+1,自己的序列号x+1,

为什么要进行三次握手呢?

简单来说就是通过三次握手可以证明客户端和服务端的收发能力均正常

第一次握手证明客户端发送能力正常

第二次握手证明服务器的接收能力和发送能力正常

第三次握手证明客户端接收能力正常

四次挥手

第一次挥手

客户端发出 释放报文,释放数据报文首部FIN=1,其序列号为seq=x

第二次挥手

服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=x+1,并且带上自己的序列号seq=y

第三次挥手

客户端接收到服务器端的确认请求后,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文FIN=1,发送序列码w,企ack=x+1

第四次挥手

客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=x+1,经过2MSL后(最长报文寿命),客户端进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

 等待2MSL的意义是防止新连接上不会出现旧的连接请求报文

;