三次握⼿:
1. 第⼀次握⼿(客户端发送syn包到服务器端):客户端发送syn包到服务
器端,进⼊syn_send状态,等待服务器端的确认;
2. 第⼆次握⼿(服务器返回syn+ack包给客户端):服务器端收到客户端
的syn包,发送syn+ack包给客户端,进⼊syn_recv状态;
3. 第三次握⼿(客服端返回ack包给服务端):客户端收到服务器端的
syn+ack包,发送个ack包到服务器端,⾄此,客户端与服务器端进⼊
established状态;
4. 握⼿过程中传送的包不包含任何数据,连接建⽴后才会开始传送数
据,理想状态下,TCP连接⼀旦建⽴,在通信双⽅的任何⼀⽅主动关闭
连接前,TCP连接都会⼀直保持下去。
image.png
四次挥⼿:
1. 第⼀次挥⼿:主动关闭⽅发送fin包到被动关闭⽅,告诉被动关闭⽅我
不会再给你发送数据了;
2. 第⼆次挥⼿:被动关闭⽅收到syn包,发送ack给对⽅,确认序号为收
到序号+1;
3. 第三次挥⼿:被动关闭⽅也也发送fin包给主动关闭⽅,告诉对⽅我也
不会给你发送数据了;
4. 第四次挥⼿:主动关闭⽅收到syn包,发送ack给对⽅,⾄此,完成四
次挥⼿;
image.png

TCP连接需要三次握手,两次不可以吗?为什么?

为了防止已失效的连接请求报文突然又传送到了服务端,因而产生错误

  • 客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留,以致延误到连接释放以后的某个时间才到达Server
  • 若不采用”三次握手”,只要Server发出确认数据包,新的连接就建立。由于Client此时并未发送建立连接请求,所以其不会理睬Server的确认,也不与Server通信,而这时Server一直等待Client的请求,浪费Server资源
  • 若采用”三次握手”,该情况下由于Server端没有收到来自客户端的确认,就会知道Client并没有要建立请求,就不会建立连接