TCP网络链接中的3次握手与4次挥手

在软件开发求职面试的时候总被问及TCP的3次握手,为什么要3次,2次不可以吗?
首先来看3次握手的一张图,理解其原理:

 

 

当客户端向服务端建立链接的时候,是需要向服务端发起且携带标识SYN=1, ACK=0,正常情况下服务端收到链接请求后,会有一个确认链接的操作并携带确认标识,SYN=1, ACK=1及seq等信息。
此是服务端的状态由Listen进入SYN-RCVD,而客户端则会进入SYN-SENT状态。客户端在收到服务端响应的链接确认请求,会再下发一次链接确认至服务端 SYN=0, ACK=1,此时客户端与服务端也就顺利完成有效的链接并都进入ESTABLISHED状态。

假若只有2次握手,客户端在请求链接时,若出现网络抖动或延迟,客户端可能会触发多次向服务端下发链接请求,若之前客户端已与服务端完成有效的链接,此时服务器又收到客户端的链接请求,则服务端会下发请求确认的链接,此时客户端与服务端又形成链接,但这时候的链接其实是不需要的,造成服务器链接资源浪费及影响服务器性能,故而2次握手是不可行的。第3次握手是客户端与服务端确认建立有效链接的流程,可以节略服务端的资源,若进入2次尿的握手,客户端还未下发确认请求,则服务端触发超时机制,清除无效的链接请求并启用标识RST。

4次挥手请详看以下两张图解:

 

posted @ 2023-01-30 22:18  浮生如梦--心猿  阅读(17)  评论(0编辑  收藏  举报