每日面经
- 考察点:计算机网络
- 题目: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是一种面向连接的,可靠的,基于字节流的传输层通信协议,通信前需要通过三次握手建立连接,通信结束后需要通过四次挥手断开连接。
三次握手和四次挥手的过程如下图(面试的时候手动画个图):
三次握手:
四次挥手:
之所以连接只需要三次握手,断开需要四次挥手,是因为TCP是全双工通信的,双方都可以同时给对方发送数据,断开的时候为了避免一方准备断开另一方还有数据需要发送的情况,所以需要双方各自关闭一次
而在第二次握手时,B端不存在未准备好的情况(否则就不是三次握手了),所以这一次握手同时传递了SYN和ACK信号简化了步骤。
解答思路: