TCP 握手为什么是三次,为什么不能是两次?不能是四次?

首先,我们来看为什么不能是两次握手:

  • 防止服务器端开启无效的连接:如果只进行两次握手,客户端发送连接请求后,服务器收到请求就会直接建立连接。但是如果这个连接请求在传输过程中出现了延迟或丢失,客户端并没有接收到服务器的确认信息,但服务器端却认为连接已经建立。这会导致服务器端无谓地为无效的连接分配资源,增加服务器的开销。
  • 防止已失效的连接请求导致错误:如果之前的连接请求在传输过程中出现了延迟或丢失,并且在客户端超时后重新发送了新的连接请求,如果服务器端只进行两次握手,那么服务器会将之前失效的连接请求当作新的有效请求处理,这将导致错误的连接建立。

因此,为了避免这些问题,需要进行第三次握手来确认连接的可靠性,确保客户端和服务器端都能正确地建立连接。

接下来,为什么不是四次握手:

TCP连接的释放是通过四次握手来完成的,与连接建立不同,释放连接需要更多的步骤。

四次握手是为了确保数据的完整传输和可靠释放,包括双方都完成数据传输并确认没有待发送的数据。在释放连接时,需要保证双方都能完整地传输完剩余的数据,并确认数据的接收。

相比而言,连接建立时的三次握手已经足够保证连接的可靠性,因为在握手过程中已经交换了初始序列号和同步信息,双方都已经确认了对方的可靠性。

因此,使用三次握手可以在保证连接可靠性的同时,减少握手过程的时间和资源消耗,使连接建立更加高效。四次握手主要用于释放连接,确保数据的完整性和可靠性,不需要在连接建立时进行。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题, 计算机网络, 计算机网络面试题