『面试问答』:TCP为什么需要三次握手?
面试官:请说一下,TCP为什么需要三次握手?
TCP 三次握手是指 TCP 在传递数据之前,需要进行 3 次交互才能正式建立起连接,并进行数据传递。
三次握手具体过程是:
1 客户端向服务器发送一个 SYN 包, 表示客户端请求建立连接。
2 服务器收到客户端的 SYN 包后,向客户端发送一个 SYN+ACK 包,表示服务器接收到了客户端的请求,并同意建立连接。
3 客户端收到服务器的 SYN+ACK 包后,向服务器发送一个 ACK 包,表示客户端确认收到了服务器的响应
TCP 之所以需要 3 次握手是因为 TCP 双方都是全双工的。所谓全双工指的是,TCP 任何一端既是发送数据方,又是接收数据方,因此这就要求 TCP 通讯双方既要保证自己的发送能力,又要保证自己的接收能力才行。
这就好像打电话时,通讯双方都要保证自己传递声音的话筒和接收声音的耳机都是正常的才行,这样才能进行有效的交流。三次握手的主要目的是确认自己和对方的发送和接收都是正常的,从而保证了双方能够进行可靠通信。
若采用两次握手,当第二次握手后就建立连接的话,此时客户端知道服务器能够正常接收到自己发送的数据,而服务器并不知道客户端是否能够收到自己发送的数据。
此外,网络往往是非理想状态的,可能存在丢包和延迟,客户端发送建立连接请求,由于网络拥塞,迟迟没有得到回应,客户端再次发送连接请求,服务端回应,连接建立。
一段时间后,客户端第一次发送的连接请求到达服务端,服务端以为客户端重新请求建立连接,但其实并没有,此时服务端会返回响应报文并一直处于待连接状态,这就造成了服务器资源的浪费。
可见,TCP采用三次握手而不是两次握手,主要原因是为了防止已失效的连接请求报文突然又传送到了服务端,从而导致错误。当然,三次握手就可以解决通信连接的问题,为了提高通信效率,也就没有必要设计成四次握手、五次握手了。
分享软件开发岗位面试题及答案