【20221108每日面经】计算机网络 - TCP三次握手四次挥手

每日面经

  • 考察点:计算机网络
  • 题目:TCP是怎样进行三次握手和四次挥手的?为什么要进行三次握手?为什么要进行四次挥手?

第一次客户端向服务器发送一个包,然后就处于等待状态
第二次服务端收到包,并回复了一下刚刚接受到的包,就发了一个新的包确认收到了,进入等待恢复状态。
第三次,客户端收到服务器的包,再次发送一个回复包,完成这个以后就是直接进入成功链接,可以互相通信
四次挥手
第一次客户端向服务器提出释放链接,进入等待状态
第二次服务器向客户端发送确认报文,进入等待状态
第三次客户端收到服务器的确认,继续等待。这时服务器B向客户端A发送链接释放的确认阶段,等待A的确认
第四次A收到服务器的释放确认后,发出确认关闭,此时服务器已经关了,但是客户端还在等待最长报文寿命后,确认关闭,四次挥手结束
为什么进行三次握手?
握手是为了建立链接,方便后期传送数据。因此,我们需要确认客户端和服务端都具有正常的发送和接收报文的能力,并且在握手的过程中互相交换信息,进行基本的认识
为什么需要四次挥手

establish process:
A:syc
B:syn+ack
A:ack
destory session:
A:fin+ack
B:ack
B:fin
A:ack
有時第三個包B會回fin+ack,A不回包,直接整個結束session。

TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议,通信前需要通过三次握手建立连接,通信结束后需要通过四次挥手断开连接。

三次握手和四次挥手的过程如下图(面试的时候手动画个图):

三次握手:

  1. A端 向 B端 发送SYN连接请求——首次握手确定A端的数据发送能力
  2. B端 向 A端 发送ACK确认连接的标识,同时发送SYN连接请求——第二次握手确认B端发送、接受数据能力正常
  3. A端 向 B端 发送ACK确认连接的标识——第三次握手确认A端接受数据的能力正常,并完成连接建立

四次挥手:

  1. A端 向 B端 发送FIN断开连接请求——A端已无数据需要传输,做好了断开准备
  2. B端 向 A端 发送ACK信号——B端向A端确认自己收到断开请求,但 B 可能还有数据需要发送未做好断开准备
  3. B端 向 A端 发送FIN信号——B端告知A自己无需要发送的数据了,做好了断开连接的准备
  4. A端 向 B端 发送ACK信号——确认收到B端可以断开的信号,双双断开连接

之所以连接只需要三次握手,断开需要四次挥手,是因为TCP是全双工通信的,双方都可以同时给对方发送数据,断开的时候为了避免一方准备断开另一方还有数据需要发送的情况,所以需要双方各自关闭一次

而在第二次握手时,B端不存在未准备好的情况(否则就不是三次握手了),所以这一次握手同时传递了SYN和ACK信号简化了步骤。

解答思路:

关闭