发生在传输层:建立端到端的连接

 

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

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

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

必要性和原因:两次握手的重点在于服务器端无法确定一个SYN信号是不是有效的,而三次握手机制因为客户端会给服务器回复第二次握手,也意味着服务器会等待客户端的第三次握手,如果第三次握手迟迟不来,服务器就可以认为之前的SYN是无效的,就可以释放相关的资源了。

 

序号的作用:一个进程可能给服务端发送多个信号,序号可以保证每个信号通道的唯一性。

 

 握手之后就成功建立了连接,然后客户端发送http请求。

发送结束后,关闭连接,进行四次挥手。客户端和服务端都可以主动发送关闭请求。

四次挥手是为了关闭连接,四次是因为可能还存在未发送完成的数据