TCP的三次握手和四次挥手

       TCP传输控制协议Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,在 OSI 模型中完成传输层指定功能。 TCP 使用校验和函数检验数据是否出现错误,在数据发送和接收时均需要计算校验和

TCP 采用“三次握手”方式建立连接+“四次挥手”方式释放连接

📐三次握手

   TCP 建立连接的过程称为握手,握手需要在客户端和服务器之间交换三个 TCP 报文段。

         TCP 三次握手的作用就是使客户端和服务端双方都明确自己的责任,保证双方都具有资源接收和发送的能力。

         客户端与服务端资源收发的三次握手过程如下:

  1. 第一次握手:客户端向服务器发送一个带有SYN标志的数据包,表示请求建立连接。客户端将随机生成一个初始序列号(ISN)并将其放入SYN字段中。

  2. 第二次握手:服务器接收到客户端的请求后,会发送一个带有SYN和ACK标志的数据包作为响应。服务器将确认序列号(ACK)设置为客户端的ISN加一,并生成自己的初始序列号。

  3. 第三次握手:客户端收到服务器的响应后,会发送一个带有ACK标志的数据包作为确认。客户端将确认序列号设置为服务器的ISN加一。

        通过三次握手,双方确认了彼此的收发能力和初始序列号,并建立了可靠的连接。为什么是三次握手而不是两次或四次呢?

       如果只有两次握手,那么在某些情况下可能会导致不可靠的连接建立。例如,客户端发送了一个建立连接的请求,但由于网络延迟或其他原因,该请求在传输过程中被延迟到达服务器。服务器此时会误认为客户端要建立连接,于是发送确认响应。然而,客户端并未发送过请求,因此不会回复确认。这样就会导致服务器一直等待客户端的回复,浪费资源。

       引入第三次握手,可以解决上述问题。在第一次握手时,客户端发出建立连接的请求,服务器接收到后进行响应。但是如果响应丢失了,客户端会再次发送请求,即第二次握手。服务器接收到后再次响应,这样就确保了双方都能正确地建立连接。

       至于为什么不是四次握手,主要是因为虽然四次握手也可以实现可靠地同步双方的初始序列号,但由于第二步和第三步可以合并为一步,所以最终演变成了三次握手。而两次握手只能保证一方的初始序列号被对方成功接收,无法保证双方的初始序列号都能被确认接收。因此,三次握手是为了确保TCP连接的稳定性和可靠性而采取的最佳选择。

📐四次挥手

       TCP的四次挥手是为了结束已建立的连接,确保双方都能正确地关闭连接并释放资源。下面是四次挥手的过程:

  1. 第一次挥手:客户端发送一个带有FIN(结束)标志的数据包,表示自己已经没有数据要发送了,请求关闭连接。

  2. 第二次挥手:服务器接收到客户端的结束请求后,会发送一个带有ACK(确认)标志的数据包作为响应,表示已收到客户端的结束请求。

  3. 第三次挥手:服务器发送一个带有FIN标志的数据包,表示自己也没有数据要发送了,请求关闭连接。

  4. 第四次挥手:客户端接收到服务器的结束请求后,会发送一个带有ACK标志的数据包作为确认,表示已收到服务器的结束请求。

       通过四次挥手,双方确认彼此的结束请求,并最终关闭连接。为什么是四次挥手而不是三次?在关闭连接时,需要确保双方都完成了数据的传输和接收,以防止数据丢失或错误。如果只有三次挥手,可能会导致一些问题。

        假设只有三次挥手,当客户端发送结束请求后,服务器收到后会发送确认,表示已收到客户端的结束请求。但是在此过程中,服务器可能还有未发送完的数据,如果直接关闭连接,那么这些数据就会丢失。因此,引入第三次挥手,服务器在发送结束请求前,先发送所有未发送完的数据,并等待客户端的确认。客户端接收到服务器的结束请求后,会确认并处理完未接收的数据,然后发送确认,表示自己已准备好关闭连接。

       通过四次挥手,可以确保双方都能正确地结束连接,并处理未发送和未接收的数据,保证数据的完整性和可靠性。因此,关闭连接需要四次挥手。

总结

       TCP协议中的三次握手用于建立可靠的连接。通过三次握手,客户端和服务器可以确认对方的可靠性和可用性,并同意建立连接。而四次挥手的设计则旨在确保连接可以正确关闭。在四次挥手过程中,双方通信结束前,首先向对方发送关闭连接的请求,然后等待对方确认关闭请求,最后确认对方关闭请求并关闭连接。这两个过程是TCP协议中非常重要的部分。

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值