两张图片轻松搞懂TCP连接时的三次握手以及断开连接时的四次挥手——面试高频

TCP建立连接 

我们先来看一张图片简单了解一下TCP在请求中是为什么要进行三次“对话”

简单理解 

具体过程 

三次握手的具体过程如下:

  1. 第一次握手
    • 客户端:客户端向服务端发送一个SYN报文段,请求建立连接。这个报文段会包含客户端的初始序列号(ISN,Initial Sequence Number),用于标识后续发送的数据包的顺序。同时,SYN标志位被置为1,表示这是一个连接请求。
    • 状态:客户端发送完SYN报文段后,进入SYN_SENT状态,等待服务端的回应。
  2. 第二次握手
    • 服务端:服务端收到客户端的SYN报文段后,会回复一个SYN-ACK报文段给客户端。这个报文段会包含服务端的初始序列号,以及一个确认号(ACK Number),该确认号是客户端SYN报文段的序列号加1,表示服务端已经收到了客户端的连接请求。同时,SYN标志位也被置为1,表示服务端也同意建立连接。
    • 状态:服务端发送完SYN-ACK报文段后,进入SYN_RCVD状态,等待客户端的最终确认。
  3. 第三次握手
    • 客户端:客户端收到服务端的SYN-ACK报文段后,会向服务端发送一个ACK报文段作为最终的确认。这个报文段的确认号是服务端SYN-ACK报文段的序列号加1,表示客户端已经收到了服务端的连接确认。此时,SYN标志位不被置为1,因为这不是一个连接请求。
    • 状态:客户端和服务端都收到对方的最终确认后,都进入ESTABLISHED状态,表示TCP连接已经成功建立,双方可以开始传输数据了。

三次请求原因 

  1. 确认双方的发送和接收能力:通过三次握手,客户端和服务端都能确认自己和对方的发送能力和接收能力正常,从而确保双方可以正常通信。
  2. 同步双方的初始序列号:TCP连接中,每个传输的数据包都会有一个序列号,用于标识该数据包的顺序。三次握手过程中,双方会交换各自的初始序列号,以便后续的数据传输能够按照正确的顺序进行。
  3. 防止已失效的连接请求报文段重复触发连接:在网络中,可能存在一些已经失效的连接请求报文段。通过三次握手,可以确保只有有效的连接请求才能建立连接,从而避免已失效的报文段对新的连接请求造成干扰

TCP断开连接 

简单的理解 

 具体过程

  1. 第一次挥手
    • 客户端:当客户端完成数据传输后,会发送一个FIN报文段给服务端,表示客户端希望关闭连接。此时,客户端进入FIN_WAIT_1状态。
    • FIN报文段:这个报文段的FIN标志位被置为1,表示请求释放连接,同时会包含一个序列号seq,用于标识这个FIN报文段的唯一性。
  2. 第二次挥手
    • 服务端:服务端收到客户端发送的FIN报文段后,会发送一个ACK报文段给客户端,表示已经收到客户端的关闭连接请求。此时,服务端进入CLOSE_WAIT状态。
    • ACK报文段:这个报文段的ACK标志位被置为1,确认序号为客户端FIN报文段的序列号加1(seq+1),表示服务端已经成功接收到了客户端的FIN报文段。
  3. 第三次挥手
    • 服务端:当服务端也完成数据传输后,会发送一个FIN报文段给客户端,表示服务端也希望关闭连接。此时,服务端进入LAST_ACK状态。
    • FIN报文段:与服务端发送的第一个ACK报文段类似,这个FIN报文段也包含了一个序列号seq,用于标识这个FIN报文段的唯一性。
  4. 第四次挥手
    • 客户端:客户端收到服务端发送的FIN报文段后,会发送一个ACK报文段给服务端,表示已经收到服务端的关闭连接请求。此时,客户端等待一段时间(通常是2MSL,即两个最大报文段生存时间)后,进入CLOSED状态,完成连接的释放。
    • ACK报文段:这个报文段的ACK标志位被置为1,确认序号为服务端FIN报文段的序列号加1(seq+1),表示客户端已经成功接收到了服务端的FIN报文段。

 四次请求原因

一、确保双方正确关闭连接

防止连接未完全关闭:在TCP连接中,数据的传输是双向的。四次挥手确保了每一方都能发送FIN报文段来表示自己没有数据要发送了,并等待对方的确认。这样,即使有一方的FIN报文段在网络中丢失,另一方也能通过超时机制来重新发送FIN报文段,从而确保连接能够完全关闭。

避免资源泄露:通过四次挥手,TCP连接的双方都能释放与连接相关的资源,如缓冲区、连接状态等,从而避免资源泄露。

二、保证数据的完整性和可靠性

确保数据完全传输:在TCP连接中,数据的传输需要保证完整性。四次挥手过程中,每一方都会等待对方的确认报文段,以确保自己已经发送的数据都被对方正确接收。只有在双方都确认对方没有数据要发送时,连接才会被关闭。

处理延迟数据:网络中存在延迟的可能性,有些数据可能在连接关闭时还在传输中。通过四次挥手,每一方都会等待一段时间(如2MSL),以确保所有延迟的数据都被处理完毕,从而避免数据丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值