一文彻底搞懂TCP三次握手和四次挥手,及常见的面试题带答案

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是全双工的,因此每个方向必须单独进行关闭。

在这里插入图片描述

三:面试题及答案

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版的

在这里插入图片描述
在这里插入图片描述

相关推荐

  1. TCP握手挥手

    2024-03-20 20:26:01       35 阅读
  2. TCP握手挥手

    2024-03-20 20:26:01       40 阅读
  3. TCP握手挥手

    2024-03-20 20:26:01       21 阅读
  4. TCP握手挥手

    2024-03-20 20:26:01       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-20 20:26:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-20 20:26:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-20 20:26:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-20 20:26:01       20 阅读

热门阅读

  1. composer切换国内或国外源

    2024-03-20 20:26:01       21 阅读
  2. Linux常用的命令

    2024-03-20 20:26:01       20 阅读
  3. 2024数据结构面试常见问题

    2024-03-20 20:26:01       18 阅读
  4. 1042 字符统计

    2024-03-20 20:26:01       19 阅读
  5. mysql事务详解

    2024-03-20 20:26:01       24 阅读
  6. Visual Studio 中的键盘快捷方式大全

    2024-03-20 20:26:01       18 阅读
  7. ARM:汇编点灯

    2024-03-20 20:26:01       19 阅读
  8. 深入理解OnCalculate函数的运行机制

    2024-03-20 20:26:01       21 阅读
  9. Stability AI推出StableLM:开源ChatGPT替代方案

    2024-03-20 20:26:01       21 阅读