TCP(传输控制协议)是一种可靠的、面向连接的协议。在TCP/IP协议栈中,它负责在两个网络应用程序之间建立可靠的会话连接。TCP通过“三次握手”建立连接,通过“四次挥手”断开连接。本文将详细介绍这两个过程,并给出一些面试题及答案。
一:TCP三次握手 (Three-Way Handshake)
过程
SYN:客户端发送一个SYN(同步序列编号)报文到服务器,并进入SYN_SENT状态,等待服务器确认。
SYN-ACK:服务器收到SYN报文后,发送一个SYN+ACK(确认)报文给客户端,并进入SYN_RCVD状态。
ACK:客户端收到服务器的SYN+ACK报文后,会发送一个ACK报文给服务器,然后双方进入ESTABLISHED(已建立连接)状态,完成三次握手,开始数据传输。
目的
TCP三次握手的主要目的是建立一个可靠的会话连接,确保双方通信端口的正确性,以及同步双方的序列号和确认号,为数据传输做好准备。
二:TCP四次挥手 (Four-Way Handshake)
过程
FIN:当通信的一方完成所有数据传输后,会发送一个FIN(结束)报文来关闭连接。
ACK:另一方收到FIN报文后,会发送一个ACK报文作为应答,并将接收到的序列号加1。
FIN:在发送了ACK报文后,该方也可以发送一个FIN报文请求关闭连接。
ACK:最初发送FIN报文的一方收到对方的FIN报文后,发送一个ACK报文作为回应,然后等待足够时间以确保对方收到这个ACK报文。
目的
四次挥手的目的是允许双方均能清楚地关闭已建立的TCP连接。由于TCP是全双工的,因此每个方向必须单独进行关闭。
三:面试题及答案
TCP三次握手面试题:
问题1:请简要描述TCP三次握手的过程。
答:第一次握手,客户端发送SYN包到服务器;第二次握手,服务器收到SYN包,回复一个SYN+ACK包;第三次握手,客户端收到服务器的SYN+ACK包后,回复一个ACK包,完成三次握手。
问题2:为什么TCP连接需要三次握手?两次不行吗?
答:三次握手可以确保双方都能够发送和接收数据,防止因网络延迟导致的问题。两次握手可能会导致服务器资源被浪费。
问题3:在TCP三次握手中,客户端和服务器分别扮演什么角色?
答:客户端发送连接请求,服务器接收并回复确认。
问题4:如果在TCP连接过程中,客户端发送的SYN包丢失了,会发生什么情况?
答:服务器会超时等待,然后重新发送SYN+ACK包,进行连接。
TCP四次挥手面试题:
问题5: 请简要描述TCP四次挥手的过程。
答:第一次挥手,客户端发送FIN包到服务器;第二次挥手,服务器收到FIN包,回复一个ACK包;第三次挥手,服务器发送FIN包到客户端;第四次挥手,客户端收到FIN包,回复一个ACK包,完成四次挥手。
问题6:为什么TCP连接需要四次挥手?不能三次挥手吗?
答:四次挥手是为了确保双方都能够完全关闭连接,防止因网络延迟导致的数据丢失或重发问题。
问题7:在TCP四次挥手中,客户端和服务器分别扮演什么角色?
答:客户端发送关闭请求,服务器确认并发送关闭请求,客户端再确认关闭。
问题8: 如果在TCP连接过程中,服务器收到客户端的FIN包后立即回复ACK包,会发生什么情况?
答:客户端可能还有数据需要发送,服务器需要等待客户端发送完数据后再发送FIN包,进行关闭连接
下载链接:博主已将以下这些面试题整理成了一个面试手册,是PDF版的